質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

7回答

1755閲覧

【PHP】配列をうまく分割できない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2016/06/20 05:50

編集2016/06/20 05:52

PHP

1<?php 2$selectBox = "<select>"; 3$arr = array("2","0","1","6","2","0","1","6","2","0","1","7","2","0","1","7","2","0","1","7"); 4$temp_arr = array_chunk($arr,4); 5for ($i=0; $i < count($temp_arr); $i++) { 6 for ($j=0; $j < 4; $j++) { 7 $temp = $temp_arr[$i][$j]; 8 $selectBox .= "<option>".$temp_arr[$i][$j]."</option>"; 9 } 10} 11echo $selectBox; 12?>

【問題】
上記のソースで、array_chunkを使って配列を分割させたつもりで、分割ができてません。
![イメージ説明
最終的には以下のように、分割がうまくできるようにしたいです。
イメージ説明
【質問】
上の画像のようにうまく分割りできるようにしたいです。わかる方、ご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答7

0

$temp_arr分割自体はされていますが、二重ループで1つずつ回してしまっているので、結局は1つずつ処理されてしまいます。implodeでつないで1つの文字列にしましょう。

php

1$selectBox = "<select>"; 2$arr = array("2","0","1","6","2","0","1","6","2","0","1","7","2","0","1","7","2","0","1","7"); 3$temp_arr = array_chunk($arr,4); 4for ($i=0; $i < count($temp_arr); $i++) { 5 $selectBox .= "<option>".implode('', $temp_arr[$i])."</option>"; 6} 7$selectBox .= '</select>'; 8echo $selectBox;

</select>の抜けについては修正しましたが、<option>valueがない件については正しい値がわからないのでそのままにしています。

投稿2016/06/20 06:01

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/20 07:17

二重ループで1つずつ回してしまっていたんですね! ありがとうございます。おかげで原因がわかりました。
guest

0

みなさん出てますが、別の方法をば。

PHP

1<?php 2$selectBox = "<select>\n"; 3$arr = array("2","0","1","6","2","0","1","6","2","0","1","7","2","0","1","7","2","0","1","7"); 4$str = implode('',$arr); 5$str = wordwrap($str,4,'/',true); 6$temp_arr = explode('/', $str); 7 8for ($i=0; $i < count($temp_arr); $i++) { 9 $selectBox .= "<option>".$temp_arr[$i]."</option>\n"; 10} 11echo $selectBox; 12echo "</select>\n"; 13```全部くっつけて、4桁で割って、配列を作り直しています。

投稿2016/06/20 06:06

shi_ue

総合スコア4437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/20 07:22 編集

別の方法載せていただいて、大変恐縮です。implodeで十分でしたが、 どこかでこのやり方を応用として活用させていただきます!! ありがとうございます。
guest

0

php

1<?php 2$selectBox = "<select>"; 3$arr = array("2","0","1","6","2","0","1","6","2","0","1","7","2","0","1","7","2","0","1","7"); 4foreach (str_split(implode('', $arr), 4) as $element) { 5 $selectBox .= "<option>" . $element . "</option>"; 6} 7echo $selectBox . "</select>";

投稿2016/06/20 06:00

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/20 07:15

array_chunck以外のやり方があったのですね! 勉強になりました。ありがとうございます。
guest

0

ベストアンサー

implode()を使いましょう。

PHP

1<?php 2$selectBox = "<select>"; 3$arr = array("2","0","1","6","2","0","1","6","2","0","1","7","2","0","1","7","2","0","1","7"); 4$temp_arr = array_chunk($arr,4); 5for ($i=0; $i < count($temp_arr); $i++) { 6 $temp = implode($temp_arr[$i]); 7 $selectBox .= "<option>".$temp."</option>"; 8} 9echo $selectBox; 10?>

投稿2016/06/20 06:00

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/20 06:13

ご回答ありがとうございます。そんな便利な機能があるなんて知らなかったです。 他の方からもたくさんご回答いただきましたが、一番ご回答は早かったということで、ベストアンサーにさせていただきます。
退会済みユーザー

退会済みユーザー

2016/06/20 06:15 編集

本当にありがとうございました。
guest

0

PHP

1<?php 2$selectBox = "<select>"; 3$arr = array("2","0","1","6","2","0","1","6","2","0","1","7","2","0","1","7","2","0","1","7"); 4$temp_arr = array_chunk($arr,4); 5for ($i=0; $i < count($temp_arr); $i++) { 6 $temp = implode($temp_arr[$i]); 7 $selectBox .= "<option>".$temp."</option>"; 8} 9echo $selectBox; 10?>

投稿2016/06/20 06:02

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/20 07:20

ご回答ありがとうございます。implodeの存在知らなかったなんて、まだまだ分析不足ですね!大変勉強になりました。
guest

0

php

1for ($i=0; $i < count($temp_arr); $i++) { 2 $selectBox .= "<option>".implode('',$temp_arr[$i])."</option>"; 3}

未検証ですがこんな感じかと・・・

または質問文のコードに沿ってやるなら下記でしょうか

php

1for ($i=0; $i < count($temp_arr); $i++) { 2 $tmp = ''; 3 for ($j=0; $j < 4; $j++) { 4 $tmp .= $temp_arr[$i][$j]; 5 } 6 $selectBox .= "<option>".$tmp ."</option>"; 7}

投稿2016/06/20 06:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/20 07:18

他とは違ったやり方で、大変勉強になりました。 ありがとうございます!!
guest

0

分割するところまではいいですが、結局分割させた配列も1文字ずつ突っ込んでしまっているからでしょうね。
下記のような感じでしょうか。

<?php $selectBox = "<select>"; $arr = array("2","0","1","6","2","0","1","6","2","0","1","7","2","0","1","7","2","0","1","7"); $temp_arr = array_chunk($arr,4); foreach ($temp_arr as $arr) { $year = null; foreach ($arr as $num) { $year .= $num; } $selectBox .= "<option>".$year."</option>"; } echo $selectBox;

投稿2016/06/20 06:00

obi_yuta

総合スコア121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

obi_yuta

2016/06/20 06:02

implode()のほうが良さそうですが、一つの解として。笑
退会済みユーザー

退会済みユーザー

2016/06/20 07:16

ご回答ありがとうございます。 とても興味深いやり方ですね!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問