• ベストアンサー

2次元の連想配列を順次読み込みするには?

PHP初心者です。 元の連想配列($ary1)   Array ( [2004] => Array ( [03] => 03 [02] => 02 ) [2003] => Array ( [12] => 12 ) ) $ary1の値だけを$ary2に抽出する。   $ary2 = array_values($ary1); すると、こんな内容になります。   Array ( [0] => Array ( [03] => 03 [02] => 02 ) [1] => Array ( [12] => 12 ) ) ここまで来ると上位階層は$ary2[0]、[1]で読めそうですが、 下位階層まで考えると$ary2[0][03]、$ary2[0][02]になっています。 これを$ary2[0][0]、$ary2[0][1]という風に順次読み込みたいのですが、 いい方法が見つかりません。 つまり2次元の下位階層も[0]~のインデックスとしたいのです。

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

  • ベストアンサー
  • togino
  • ベストアンサー率75% (97/129)
回答No.1

回答になっていないかもしれませんが foreach($ary1 as $year => $year_ary){  foreach($year_ary as $month => $month_data){   print("\$ary1[$year][$month] = $month_data<br>\n");  } } (注:インデントに全角スペースを使っています) のように順次読み込みしては、目的は達せられないのでしょうか? 0 からのインデックスに変換したいのであれば $i = 0; foreach($ary1 as $year_ary){  $j = 0;  foreach($year_ary as $month_data){   $ary2[$i][$j] = $month_data;   $j ++;  }  $i ++; } print_r($ary2); って感じでしょうか?

mogmogtae
質問者

お礼

ご回答ありがとうございます。 お礼が大変遅くなり申し訳ございません。 せっかく色々教えていただいたのですが、 以下の文で目的が達成されました。 foreach($ary1[$Nen] as $Tuki){ $Nenが2004の時、$Tukiに03、02と 取り出せるのですね。

その他の回答 (1)

回答No.2

私はPerlで言うmap使ってこんな感じ。 $ary2 = array_values($ary1); array_walk($ary2,"test"); print_r($ary2); function test(&$val,$key){ $val = array_values($val); } 時間を計ってみたけど、#1のtoginoさんのと ほとんど同じ。

mogmogtae
質問者

お礼

ご回答ありがとうございます。 お礼が大変遅くなり申し訳ございません。 1さんのお礼で述べた通りなのですが、 foreachの使い方が不慣れなせいで 混乱していました。

関連するQ&A

専門家に質問してみよう