2016-04-15 15 views
0

を通じて私は多次元配列をループにしようとしていますが、foreachループではそれだけでエラーループは、PHP多次元配列

インデックスの「name」が見つかりませんを出力します。インデックス 'カロリー' ではない創設者

 foreach($responsex['foods'] as $fx5) 
     { 
      echo($fx5['name']); 
      echo($fx5['calories']); 
     } 

応答:すなわち$ responsex

配列( 'encodedId' => '4H8xxx'、 'のdisplayName' => 'サム')配列( "false") ["logDate"] =>文字列(10){0} =>配列(3){[食品] "" ["logId"] => int(7139364449) ["loggedFood"] =>配列(10){["accessLevel"] =>文字列(6) "PUBLIC" ["amount" ] => int(2)["brand"] => str ["foodType"] => int(536497687)["locale"] =>文字列(5) "en_AU" ["mealTypeId"] = > "int"(7)["name"] => string(14) "Potato Pudding" ["unit"] => array(3){["id"] => int(91)["name"] = > [文字列(3)] "カップ" ["複数] =>文字列"カップ "} [" units "] =>配列(8){[0] => int(6754) [1] = > int(2)=> int(256)[3] => int(279)[4] => int(226)[5] => int(180)[6] => int(147) "脂肪"( "脂肪")=> int(574)["炭水化物"] =>フロート(49.16)["脂肪]] => ["sodium"] => int(1524)}} [1] => float( "1600" ["logDd"] =>文字列(10) "2016-04-15" ["logId"] => ["brand"] => int(7138517833)["loggedFood"] =>配列(10){["accessLevel"] => 文字列( "PUBLIC" ["amount"] => int"en_AU" ["mealTypeId"] = "int"(int)["foodId"] => int(535239347)["locale"] => 文字列(5) > [""] =>配列(3) {["id"] => int(7)["name"] =>文字列(54) "魚、 チーズソースの麺と野菜"cups"} ["units"] => array(8){[0] = int(91)["name"] = > int(226)[>] int(256)[3] => int(226)[5] => int(180) int(359)["炭水化物]"は、 ] => float(28.01)["fat"] => float(14.05)["fiber"] => 012 (5){["isFavorite"] => bool(false)]]]]]]]> float( " ["logDate"] => string(10) "2016-04-15" ["logId"] => int(7138326866)["loggedFood"] =>配列(10){ ["accessLevel"] = > "foodId"] => int(157)["ブランド"] => 012 " > "int"(11) "カシューナッツ" ["ユニット(")] "int"(ユニット番号:536493638) ["locale"] =>文字列(5) "en_AU" ["mealTypeId"] => int [7] ["name"] => "" "=" string "(2)" oz "}"> "{" "id"] => int(226) ["name"] => ["units"] => array(4){[0] => int(226)[1] => int(180)[2] => int(147)[3] => int(389) }} ["nutritionalValues"] =>配列(6){["カロリー"] => int(157)["fib"] => float(5.17)["sodium"]は、 int(1411)} ["summary"] => int(3)}}} ["goals"] => array(2){["カロリー"] => int(1161)["estimatedCaloriesOut"] => "" fat = "float(61.46)[" fiber "] => float(" fat ")=> array(7){" "calories" float(7.4) ["protein"] => float(50。35) "ナトリウム"] => INT(2061)[ "水"] => INT(0)} }

+0

あなたは私たちが使用する3v4l.orgを作成することができます。あなたの配列はかなりのものでデバッグすることができます。 –

+0

plzはprint_rまたはjson_encodeを使用して結果を表示します – dev

答えて

1

あなたは再帰的配列を反復し、キーと値のペアとして次のようにそれらを印刷することができます。

<?php 
//initially call the function 
print_array($responsex); 

function print_array($array){ 
    foreach($array as $key=>$value){ 
     //recursively print the array 
     if(is_array($value)){ 
      echo("Array : ".$key."\n"); 
      print_array($value); 
     } 
     else{ 
      echo($key." => ".$value); 
     } 
    } 
} 
?> 

上記のコードで印刷する以外のタスクを追加定義することができます。

編集

あなたは、配列を再帰的に行くには2次元、必要ではないことを確信している場合。

<?php 
//initially call the function 
print_array($responsex); 

//if you are sure that the array is two dimensional, no need to go recursively. 
function print_array($array){ 
    foreach($array as $key=>$value){ 
     if(is_array($value)){ 
      if($key==="foods"){ 
       var_dump($array[$key]); 
      } 
     } 
     else{ 
      echo($key." => ".$value); 
     } 
    } 
} 
+0

これはちょうど私に内側の配列 "フード"の名前を与えます。 Array:foodsを出力します。 "foods"配列内の値にアクセスする必要があります – condo1234

+0

内側のforeachでecho($ v)を出力すると、配列が返されます。私は最初の応答で "食品"インデックスの配列を基本的にvar_dumpするとき – condo1234

+0

ああ、はい、var_dumpを使って、一度に全体の配列を取得できます。 –

0

使用このよう..

<?php 

$keys = array_keys($data);// put your array name as a place of $data 
    $iterations = count($array[$keys[0]]); 

    for($i = 0; $i < $iterations; $i++) { 
     $data = array(); 
     foreach($array as $key => $value) { 
      $data[$key] = $value[$i]; 
     } 
     print_r($data); 
    } 

?>