У меня есть вложенный массив, в котором я хочу отобразить подмножество результатов. Например, в приведенном ниже массиве я хочу перебрать все значения в вложенном массиве [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 ) ) ) ) )
Можете ли вы получить все пути? Данные выглядят как двоичное дерево. Нужна помощь