foreachで多次元配列になってしまう理由とは?

このQ&Aのポイント
  • foreachを使用した際に、多次元配列になる理由はなぜでしょうか?
  • 期待している結果と実際の結果が異なるのはなぜでしょうか?
  • foreachで多次元配列にならないようにする方法はありますか?
回答を見る
  • ベストアンサー

foreachで多次元配列にしたくないのですが……

foreachで多次元配列にしたくないのですが、多次元配列になってしまいます。 なぜでしょうか? ■$hoge Array (  [0] => 3  [1] => 9 ) ■処理 foreach ($hoge as $val){  $result[]= 関数($val); } ■期待している結果 Array (   [0] => Array     (       [id] => 1       [created_at] => 2013-08-01     )   [1] => Array     (       [id] => 2       [created_at] => 2013-08-02     ) ) ■実際の結果 Array (   [0] => Array     (       [0] => Array          (            [id] => 1            [created_at] => 2013-08-01          )     )   [1] => Array     (       [0] => Array          (            [id] => 2            [created_at] => 2013-08-02          )     ) )

  • re97
  • お礼率80% (601/744)
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
noname#244856
noname#244856
回答No.1

肝心の「関数」のソース書いてください・・・

re97
質問者

お礼

回答ありがとうございました。 おかげでうまくいきましたー

関連するQ&A

  • 多次元配列で、foreachを使って、key値を

    多次元配列で、foreachを使って、key値を入れ替えているのですが、 なんで、こうなるか分かりません。  $x = array();  $x[] = array(   "id" => 1,   "name" => "JavaScript",  );  $x[] = array(   "id" => 5,   "name" => "PHP",  );  $z = array();  foreach($x as $key => $value){   $z[$value["id"]] = $value;   }  print_r($z); 配列のKEYをIDに変更しているのですが、 なんで、こうなるのでしょうか? 特に、  $z[$value["id"]] = $value; が分かりません。 例えば、foerachの途中で、var_dumpすると、 1回目だと、 ◆$key 0 ◆$value Array (  [id] => 1  [name] => JavaScript ) ◆$value["id"] 1 まではいいのですが、 ◆$z[$value["id"]] の値が見れません。 ここはどんな処理をやっているのでしょうか?

    • ベストアンサー
    • PHP
  • 多次元配列の計算方法について

    PHP習い始めたばかりで困っているので教えてください。。 多次元配列の要素ごとの計算ループが分からないです。 前提:多次元配列$tajiには15個の要素があり、それぞれに0か1が大量に入っています(具体的には、チェックボックスの回答に因っていて、回答される度に0か1がDBを経由して増えていく感じです) $taji[$rone][] = $row[$rone]; //var_dumpで確認したところちゃんと多次元配列として各要素に値が入っていました。 foreach($taji as $val1){ foreach($val1 as $val2){ print array_sum($val2); }; } …だとエラーになってしまいます。。 希望としては、要素ごとに合計を計算して表示してほしいのですが、 array_sumは多次元配列を無視してしまうのでしょうか?? 全く分からず困っているので、どなたかご教授よろしくおねがいします。

    • ベストアンサー
    • PHP
  • PHPで多次元配列を一度に処理するには

    例えば、 array(  [hoge1-1] => hoge1-1_value  [hoge1-2] => array(   [hoge2-1] => hoge2-1_value   [hoge2-2] => hoge2-2_value   [hoge2-3] => array(    [hoge3-1] => hoge3-1_value   )  ) ) のような多次元配列で、すべてのvalueに同じ処理を施すには foreachのなかにforeachを書いて処理するしかないのでしょうか。 もっと単純に、すべてのファイルを一度に処理できるようにする方法は ないでしょうか?

    • ベストアンサー
    • PHP
  • 二次元配列のforeachはどうすれば?

    <form action="form_check.php" method="POST"> <input type="checkbox" name="check[]" value="aaaa"> <input type="checkbox" name="check[]" value="bbbb"> <input type="checkbox" name="check[]" value="cccc"> <input type="submit" value="送信"> </form> フォームでこのように送りました このデータを受け取り、1つにまとめたいのですが foreach($_POST[check] as $val){ if($all){ $all .= ",".$val; }else{ $all = $val; } } このようにしてみたところ Warning: Invalid argument supplied for foreach() とエラーが出ました。 二次元配列でforeachのループをかけるときはどのように記述すればいいのでしょうか。

    • ベストアンサー
    • PHP
  • 多次元配列を連想配列へ変換したい

    以下のような多次元配列を、 Array ( [0] => Array     (     [0] => Array       (         [id] => 3         [hoge_id] => 15       )     ) [1] => Array   (     [0] => Array       (         [id] => 9         [hoge_id] => 15       )   ) [2] => Array   (     [0] => Array       (         [id] => 18         [hoge_id] => 15       )   ) [3] => Array   (     [0] => Array       (         [id] => 22         [hoge_id] => 15       )     [1] => Array       (         [id] => 22         [hoge_id] => 15       )     [2] => Array       (         [id] => 22         [hoge_id] => 15       )   ) ) 下記のような連想配列へ変換したいです Array (     [0] => Array       (         [id] => 3         [hoge_id] => 15       )     [1] => Array       (         [id] => 9         [hoge_id] => 15       )     [2] => Array       (         [id] => 18         [hoge_id] => 15       )     [3] => Array       (         [id] => 22         [hoge_id] => 15       )     [4] => Array       (         [id] => 22         [hoge_id] => 15       )     [5] => Array       (         [id] => 22         [hoge_id] => 15       ) )

    • ベストアンサー
    • PHP
  • 配列の初期化について(foreachを使う際)

    配列を、foreachの中で処理して、再び配列に入れたいです。 foreach ($a as $b) {   $tmp[]=処理($b); } ってやると、配列で取得できるのですが、 $tmp=array(); foreach ($a as $b) {   $tmp=処理($b); } ってやると、配列にならずに、 1つしかとれません。 どちらも、配列を初期化しているつもりなのですが、 $tmp=array();と、$tmp[]では、何が違うのでしょうか?

    • ベストアンサー
    • PHP
  • 3次元配列を2次元配列にする方法はありますか?

    3次元配列を2次元配列にする方法はありますか? すいません、初心者です。 オープンソースとyahooとgoogleのAPIを使って統合型メタ検索エンジンを作っています。 yahooの結果の配列は2次元配列で出せました。 $search_results[$i]["url"] google APIは1回のリクエストで8件までしか呼び出せないみたいなので、 curl_multi関数を使って複数のリクエストを同時に取得しています。 そうしたら結果の配列は三次元配列になりました。 $search_results[$id][$i]["url"] 以下googleの関数です。curl_multiの部分等、文字数の関係で省略しています。 省略した部分のソースは下記リンクにのっています。 http://phpspot.org/blog/archives/2008/02/phpapi.html function search_google($query) { $curls = array(); $search_results = array(); $i=0; $site_results = array( 'http://ajax.googleapis.com/&start=0', 'http://ajax.googleapis.com/&start=8', 'http://ajax.googleapis.com/&start=16', 'http://ajax.googleapis.com/&start=24', 'http://ajax.googleapis.com/&start=32', 'http://ajax.googleapis.com/&start=40', 'http://ajax.googleapis.com/&start=48', 'http://ajax.googleapis.com/&start=56'); foreach($curls as $id=>$c) { $searchs[$id] = curl_multi_getcontent($c);//$cが$site_resultsのリクエスト結果 curl_multi_remove_handle($mh, $c); $json=json_decode($searchs[$id]); if($json->responseStatus != 200){exit();} $responseData = $json->responseData; $results = $responseData->results; for($i=0;$i<count($results);$i++){ $title = $current_result->title; $search_results[$id][$i]["title"]= $title; } } curl_multi_close($mh); return $search_results; } 統合型メタ検索にしたいと考えているのでgoogle配列の変数[$id]同士を結合して yahooの結果と同じく $search_results[$i]["url"] のような二次元配列にしたいのですが、そのようなことは可能ですか? 本当は両方とも3次元配列にするという処理が適切だと思いますが、初心者がオープンソースを改良して使用しているので、どこを直せば3次元配列のものをうまく表示できるのかわからないのです。 わかりにくかったらすいません。どうか、よろしくお願いします。

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

    • ベストアンサー
    • PHP
  • foreachのなかで次のキーを参照するには

    こんばんわ, 現在PHPを学習しています。 たとえば, $hoge[0]=1; $hoge[1]=2; $hoge[2]=3; $hoge[3]=4; $hoge[4]=5; $hoge[5]=6; $hoge[6]=7; と配列があり,これをforeachで回していく際に,hogeが5になったときには,次の配列の要素である6を参照したい場合に foreach($hoge as $val){ if($val == 5){ /* $valの次の要素を見たい */ } else{ echo $val; } } をどのようにすれば,よろしいでしょうか。foreach文ではだめなのでしょうか。 nextやeachをしようしようとおもったのですが,うまくいきません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 2次元配列を多次元配列にする。

    2次元配列を多次元配列にする。 PHP5で 2次元目はすべて同じキーの2次元配列を 2次元目のキーごとの内容を共通項にまとめて、 多次元配列にする方法を教えてください。 キーの数は膨大なので、関数の再帰呼び出し で、きれいに処理したいのです。 説明文では説明しきれないので、 やりたいことは↓の通りです。 array[0] = array([one] => "あ", [twe] => "う" [three] => "き"); array[1] = array([one] => "あ", [twe] => "う" [three] => "く"); array[2] = array([one] => "あ", [twe] => "え" [three] => "け"); array[3] = array([one] => "あ", [twe] => "え" [three] => "こ"); array[4] = array([one] => "い", [twe] => "お" [three] => "さ"); array[5] = array([one] => "い", [twe] => "お" [three] => "し"); array[6] = array([one] => "い", [twe] => "か" [three] => "す"); array[7] = array([one] => "い", [twe] => "か" [three] => "せ"); という配列があったら、これを↓のようにしたいです。 array( [あ] => array( [う] => array ("き", "く") [え] => array ("け", "こ") ) [い] => array( [お] => array ("さ", "し") [か] => array ("す", "せ") )   ) どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう