• ベストアンサー

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"=>"大阪"),); という具合になってくれないでしょうか? これでいくと、配列の最後の要素のみデータに残ります。 どのようにしたらよいでしょうか? ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • riyop
  • ベストアンサー率41% (7/17)
回答No.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]; } ?> 私ならこうしますね。

ryu00026
質問者

お礼

ありがとうございます 上手くいきました。 あれから自分でも考えて array_mergeを使ってました。でもこちらの方がシンプルでよいですね。 人によっていろいろやり方があって面白いですね。

その他の回答 (1)

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

> これでいくと、配列の最後の要素のみデータに残ります。 このやり方では、配列に毎回新しい配列をコピーしているからです。 新しい配列を作り、それに格納して行かなくてはなりません。 $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);

ryu00026
質問者

お礼

ありがとうございます >このやり方では、配列に毎回新しい配列をコピーしているからです たしかにマニュアル等にもそのように書かれていました。 おかげさまでうまくいきました。 array_pushを使えばよかったんですね。

関連するQ&A