重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

こんにちわ。

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

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

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

A 回答 (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];
}
?>

私ならこうしますね。
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2002/10/23 18:34

> これでいくと、配列の最後の要素のみデータに残ります。



このやり方では、配列に毎回新しい配列をコピーしているからです。
新しい配列を作り、それに格納して行かなくてはなりません。

$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);
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/10/23 18:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!