var_dump multidimensional espaƱol array php arrays foreach nested

multidimensional - PHP foreach con Nested Array?



foreach php array multidimensional (4)

Tengo una matriz anidada en la que quiero mostrar un subconjunto de resultados. Por ejemplo, en la matriz a continuación quiero recorrer todos los valores en una matriz anidada [1].

Array ( [0] => Array ( [0] => one [1] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) [1] => Array ( [0] => two [1] => Array ( [0] => 4 [1] => 5 [2] => 6 ) ) [2] => Array ( [0] => three [1] => Array ( [0] => 7 [1] => 8 [2] => 9 ) ) )

Estaba tratando de utilizar la función foreach pero parece que no puedo hacer que esto funcione. Esta fue mi sintaxis original (aunque me doy cuenta de que está mal).

$tmpArray = array(array("one",array(1,2,3)),array("two",array(4,5,6)),array("three",array(7,8,9))); foreach ($tmpArray[1] as $value) { echo $value; }

Estaba tratando de evitar una comparación de variables sobre si la clave es la misma que la clave que deseo buscar, es decir,

foreach ($tmpArray as $key => $value) { if ($key == 1) { echo $value; } }

¿Algunas ideas?


¿Qué tal esta información?

[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 ) ) ) ) )

¿Puedes obtener todos los caminos? Los datos se ven como un árbol binario. Necesito ayuda


Ambas sintaxis son correctas. Pero el resultado sería Array . Probablemente quieras hacer algo como esto:

foreach ($tmpArray[1] as $value) { echo $value[0]; foreach($value[1] as $val){ echo $val; } }

Esto imprimirá la cadena "dos" ($ valor [0]) y los números enteros 4, 5 y 6 de la matriz ($ valor [1]).


Si conoce la cantidad de niveles en matrices anidadas, simplemente puede hacer bucles anidados. Al igual que:

// 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; } }

si no conoce la profundidad de la matriz, necesita usar la recursión. Vea el siguiente ejemplo:

// 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"; } } } }

El siguiente código muestra solo una matriz anidada con valores para su caso específico (3er nivel solamente)

$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"; } } }


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; } }

Perfecto funcionó para mí ... prueba esto