- ベストアンサー
foreachで多次元配列を生成
こんにちわ。 配列をforeachでループさせて、それを多次元配列に入れていくことは可能でしょ うか? 例えば以下のようなデータがあるとします。 ---meibo.dat-------- c21<>田中<>21<>東京 c22<>佐藤<>22<>大阪 -------------------- ---test.php----------------------------------------------------- <? $list_meibo = file("meibo.dat"); foreach($list_meibo as $temp){ $i=split("<>",$temp); $a=array($i[0] => array("name"=>$i[1],"age"=>$i[2],"ad"=>$i[3]),); } ?> ------------------------------------------------------------------- これでは $a=array("c21"=>array("name"=>"田中","age"=>"21","ad"=>"東京"), "c22"=>array("name"=>"佐藤",age"=>"21","ad"=>"大阪"),); という具合になってくれないでしょうか? これでいくと、配列の最後の要素のみデータに残ります。 どのようにしたらよいでしょうか? ご教授お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
<? $list_meibo = file("meibo.dat"); $a = array(); foreach($list_meibo as $temp){ $i=split("<>",$temp); $a[$i[0]]["name"] = $i[1]; $a[$i[0]]["age"] = $i[2]; $a[$i[0]]["ad"] = $i[3]; } ?> 私ならこうしますね。
その他の回答 (1)
- kusukusu
- ベストアンサー率38% (141/363)
> これでいくと、配列の最後の要素のみデータに残ります。 このやり方では、配列に毎回新しい配列をコピーしているからです。 新しい配列を作り、それに格納して行かなくてはなりません。 $data=array(); $list_meibo = file("meibo.dat"); foreach($list_meibo as $temp){ $i=split("<>",$temp); $a=array($i[0] => array("name"=>$i[1],"age"=>$i[2],"ad"=>$i[3])); array_push($data,$a); } これで配列の中身を確認してみてください。 print_r($data);
お礼
ありがとうございます >このやり方では、配列に毎回新しい配列をコピーしているからです たしかにマニュアル等にもそのように書かれていました。 おかげさまでうまくいきました。 array_pushを使えばよかったんですね。
お礼
ありがとうございます 上手くいきました。 あれから自分でも考えて array_mergeを使ってました。でもこちらの方がシンプルでよいですね。 人によっていろいろやり方があって面白いですね。