У меня есть вложенный массив, в котором я хочу отобразить подмножество результатов. Например, в приведенном ниже массиве я хочу перебрать все значения в вложенном массиве [1].
массив ( [0] => Массив ( [0] => один [1] => Массив ( [0] => 1 [1] => 2 [2] => 3 ) ) [1] => Массив ( [0] => два [1] => Массив ( [0] => 4 [1] => 5 [2] => 6 ) ) [2] => Массив ( [0] => три [1] => Массив ( [0] => 7 [1] => 8 [2] => 9 ) ) )
Я пытался использовать функцию foreach, но я не могу заставить это работать. Это был мой оригинальный синтаксис (хотя я понимаю, что это неправильно).
$ tmpArray = array (array ("one", array (1,2,3)), array ("two", array (4,5,6)), array ("three", array (7,8,9 ))); foreach ($ tmpArray [1] как $ value) { echo $ value; }
Я пытался избежать переменного сравнения того, является ли ключ таким же, как ключ, который я хочу выполнить, т. Е.
foreach ($ tmpArray as $ key => $ value) { if ($ key == 1) { echo $ value; } }
Есть идеи?
Если вы знаете количество уровней в вложенных массивах, вы можете просто встраивать петли. Вот так:
// Scan through outer loop foreach ($tmpArray as $innerArray) { // Check type if (is_array($innerArray)){ // Scan through inner loop foreach ($innerArray as $value) { echo $value; } }else{ // one, two, three echo $innerArray; } }
если вы не знаете глубину массива, вам нужно использовать рекурсию. См. Пример ниже:
// Multi-dementional Source Array $tmpArray = array( array("one", array(1, 2, 3)), array("two", array(4, 5, 6)), array("three", array( 7, 8, array("four", 9, 10) )) ); // Output array displayArrayRecursively($tmpArray); /** * Recursive function to display members of array with indentation * * @param array $arr Array to process * @param string $indent indentation string */ function displayArrayRecursively($arr, $indent='') { if ($arr) { foreach ($arr as $value) { if (is_array($value)) { // displayArrayRecursively($value, $indent . '--'); } else { // Output echo "$indent $value \n"; } } } }
Код ниже с отображением только вложенного массива со значениями для вашего конкретного случая (только 3-го уровня)
$tmpArray = array( array("one", array(1, 2, 3)), array("two", array(4, 5, 6)), array("three", array(7, 8, 9)) ); // Scan through outer loop foreach ($tmpArray as $inner) { // Check type if (is_array($inner)) { // Scan through inner loop foreach ($inner[1] as $value) { echo "$value \n"; } } }
Оба синтаксиса верны. Но результатом будет Array
. Вероятно, вы хотите сделать что-то вроде этого:
foreach ($tmpArray[1] as $value) { echo $value[0]; foreach($value[1] as $val){ echo $val; } }
Это напечатает строку «два» (значение $ [0]) и целые числа 4, 5 и 6 из массива (значение $ [1]).
foreach ($tmpArray as $innerArray) { // Check type if (is_array($innerArray)){ // Scan through inner loop foreach ($innerArray as $value) { echo $value; } }else{ // one, two, three echo $innerArray; } }
Идеальный работал для меня …. попробуйте это
Как насчет этих данных:
[0] => Array ( [item] => null [count] => 0 [child] => Array ( [1] => Array ( [item] => 1 [count] => 6 [child] => Array ( [5] => Array ( [item] => 5 [count] => 3 [child] => Array ( [4] => Array ( [item] => 4 [count] => 1 ) ) ) [3] => Array ( [item] => 3 [count] => 2 [child] => Array ( [4] => Array ( [item] => 4 [count] => 1 ) ) ) ) ) [3] => Array ( [item] => 3 [count] => 1 [child] => Array ( [4] => Array ( [item] => 4 [count] => 1 ) ) ) ) )
Можете ли вы получить все пути? Данные выглядят как двоичное дерево. Нужна помощь