- ベストアンサー
繰り返し処理が上手くいかない
- PHP5で繰り返し処理を使い、配列に値を格納する処理がうまくいかない問題が発生しています。
- foreachループで値を分解し、質問の値を配列に格納しようとしていますが、配列に入る値が1つしかありません。
- 原因を特定できず困っています。アドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1~4行目:$EXPLODE_NUMという配列に毎回$valが分解された値が 上書きでセットされるので最終的に$ARR_SCATTERの最後の値に相当する $valが分解された値しかセットされない状態で5行目以降の処理を行います。 なのでforeachループの範囲を値セットまで広げる必要があります。 6,14行目:1回のforループで$testの値は2カウントアップされてしまいます。 14行目は不要です。 さらに最後の質問の答えをわざわざ別の変数にする必要がないです。 質問数が変動なので。 8~13行目:$QUESTION_NO,$LAST_QUESTIONは処理途中の一時的な変数ですので わざわざ配列にしなくていいです。$TOTALは[1]からセットするなら配列のキー名を しっかりと入れるべきです。 というか元の処理も$TOTAL[1]~[5]は人数分繰り返しても毎回上書きされるので 最後の人の分しかセットされないと思いますよ? ちょっと上の処理を見ても最終的に何をやりたいかわからなかったので 次のようなことがしたいのかな?と想像して書きます。 やりたいことと間違ってたら指摘してください。 (1)$ARR_SCATTERには$ARR_SCATTER[num]=valueという形で (num:回答者の番号 value:回答の値がa,b,c,d,eとカンマ区切りで数値で設定されている) 値が設定されている。 (2)$TOTAL[num]にvalueの値を配列で設定したい。 <?php $ARR_SCATTER = array(1 => '1,2,3,4,5', 2 => '10,20,30,40,50'); foreach($ARR_SCATTER as $key => $val){//人数分繰り返す //値を分解 $EXPLODE_NUM = explode(",", $val); foreach($EXPLODE_NUM as $value){ $TOTAL[$key][] = $value; } } print_r($TOTAL); ?>
その他の回答 (1)
- Yupa3
- ベストアンサー率37% (190/513)
$for_arr_countの値はちゃんと5になってますか?
補足
5になっています。 また現在の結果は array[0] => ([0] => 1) array[1] => ([1] => 2) といった感じになっています。 array[0] => ([0] => 1 [1] => 2 [2] => 3) array[1] => ([0] => 1 [1] => 2 [2] => 3) というようにしたいのです。
お礼
ありがとうございました!!! 無事解決しました。