2016-04-15 4 views
0

Я пытаюсь Переберите многомерный массив, но в цикле Еогеаспа он просто выводит ошибкуПетля через PHP многомерного массив

«имя» индекса не найден. индекс 'калорий' не основатель

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

Ответ: т.е. $ responsex

массив ('encodedId' => '4H8xxx', 'DISPLAYNAME' => 'сэм') массив (3) { ["food"] => array (3) {[0] => array (5) {["isFavorite"] => bool (false) ["logDate"] => string (10) «2016-04-15» [«logId»] => int (7139364449) ["loggedFood"] => array (10) {["accessLevel"] => string (6) "PUBLIC" ["amount" ] => int (2) ["brand"] => str (0) «" ["calories"] => int (574) ["foodId"] => int (536497687) ["locale"] => строка (5) "en_AU" ["mealTypeId"] = > int (7) ["name"] => string (14) "Potato Pudding" ["unit"] => array (3) {["id"] => int (91) ["name"] = > string (3) "cup" ["plural"] => string (4) "cups"} ["units"] => array (8) {[0] => int (6754) [1] = > int (91) [2] => int (256) [3] => int (279) [4] => int (226) [5] => int (180) [6] => int (147) [7] => int (389)}} ["nutritionalValues"] => массив (6) {["calories"] => int (574) ["carbs"] => float (49.16) ["fat "] => float (34.98) [" fiber "] => float (3.6) [" protein "] => float (16.1) [" sodium "] => int (1524)}} [1] => array (5) {["isFavorite"] => bool (false) ["logDate"] => string (10) "2016-04-15" ["logId"] => int (7138517833) ["loggedFood"] => array (10) {["accessLevel"] => string (6) "PUBLIC" ["amount"] => int (1) ["brand"] => string (0) "" ["calories"] => int (359) ["foodId"] => int (535239347) ["locale"] => строка (5) "en_AU" ["mealTypeId"] = > int (7) ["name"] => string (54) "Fish, Лапша и овощи в сыром соусе (смесь)" ["unit"] => массив (3) {["id"] => int (91) ["name"] => string (3) "cup" ["plural"] => string (4) "cups"} ["units"] => array (8) {[0] = > int (6837) [1] => int (91) [2] => int (256) [3] => int (279) [4] => int (226) [5] => int (180) [6] => int (147) [7] => int (389)}} ["nutritionalValues"] => массив (6) {["calories"] => int (359) ["carbs" ] => float (28.01) ["fat"] => float (14.05) ["fiber"] => float (2.9) ["protein"] => float (29.08) ["sodium"] => int (534)}} [2] => массив (5) {["isFavorite"] => bool (false) ["logDate"] => string (10) "2016-04-15" ["logId"] => int (7138326866) ["loggedFood"] => array (10) { ["accessLevel"] = > string (6) "PUBLIC" ["amount"] => int (1) ["brand"] => string (0) "" ["calories"] => int (157) ["foodId"] = > int (536493638) ["locale"] => string (5) "en_AU" ["mealTypeId"] => int (7) ["name"] => string (11) "Орехи кешью" ["unit "] => array (3) {[" id "] => int (226) [" name "] => string (2)" oz "[" plural "] => string (2)" oz "} ["units"] => массив (4) {[0] => int (226) [1] => int (180) [2] => int (147) [3] => int (389) }} ["nutritionalValues"] => array (6) {["calories"] => int (157) ["carbs"] => float (8.56) ["fat"] => float (12.43) ["fiber"] => float (0.9) ["protein"] => float (5.17) ["натрий" ] => int (3)}}} ["goals"] => array (2) {["calories"] => int (1161) ["оценкамCaloriesOut"] => int (1411)} ["summary "] => массив (7) {[" calories "] => int (1090) [" carbs "] => float (85.73) [" fat "] => float (61.46) [" fiber "] => 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); 
     } 
    } 
} 
?> 

Вы можете определить дополнительные задачи, кроме как распечатывать их с помощью вышеуказанного кода.

Edit:

, если вы уверены, что массив двумерный, нет необходимости идти рекурсивно.

<?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: продукты. Мне нужно получить доступ к значениям в массиве «продукты» – condo1234

+0

При выходе из эха ($ v) во внутреннем foreach просто возвращает массив. Когда я var_dump его в основном массив в индексе «food» в начальном ответе – condo1234

+0

Ahh, да, вы можете использовать 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); 
    } 

?> 
Смежные вопросы