こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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"=>"大阪"),);

という具合になってくれないでしょうか?
これでいくと、配列の最後の要素のみデータに残ります。

どのようにしたらよいでしょうか?
ご教授お願いします。

投稿日時 - 2002-10-21 08:27:07

QNo.385902

すぐに回答ほしいです

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

<?
$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];
}
?>

私ならこうしますね。

投稿日時 - 2002-10-21 13:51:05

お礼

ありがとうございます
上手くいきました。

あれから自分でも考えて
array_mergeを使ってました。でもこちらの方がシンプルでよいですね。

人によっていろいろやり方があって面白いですね。

投稿日時 - 2002-10-23 18:34:57

ANo.2

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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);

投稿日時 - 2002-10-21 12:12:56

お礼

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

投稿日時 - 2002-10-23 18:25:01