Iteración sobre una matriz asociativa compleja en PHP

¿Existe una manera fácil de iterar sobre una matriz asociativa de esta estructura en PHP?

La matriz $searches tiene un índice numerado, con entre 4 y 5 partes asociativas. Así que no solo necesito repetir más de $searches[0] a $searches[n] , sino también $searches[0]["part0"] a $searches[n]["partn"] . La parte difícil es que los diferentes índices tienen diferentes números de partes (algunos pueden faltar uno o dos).

¿Piensas en hacer esto de una manera que sea agradable, ordenada y comprensible?

Nido dos bucles foreach :

 foreach ($array as $i => $values) { print "$i {\n"; foreach ($values as $key => $value) { print " $key => $value\n"; } print "}\n"; } 

Sé que es cuestión de nigromancia, pero iterar sobre matrices multidimensionales es fácil con Iteradores Spl

 $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); foreach($iterator as $key=>$value) { echo $key.' -- '.$value.'
'; }

Ver

Parece un buen lugar para una función recursiva, esp. si tienes más de dos niveles de profundidad.

 function doSomething(&$complex_array) { foreach ($complex_array as $n => $v) { if (is_array($v)) doSomething($v); else do whatever you want to do with a single node } } 

Debería poder usar una statement anidada de foreach

del manual php

 /* foreach example 4: multi-dimensional arrays */ $a = array(); $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; } } 

¿Puedes recorrer todos los elementos de “parte [n]” y usar isset para ver si realmente existen o no?

Realmente no estoy seguro de lo que quieres decir aquí. ¿Seguramente un par de bucles foreach hacen lo que necesitas?

 foreach($array as $id => $assoc) { foreach($assoc as $part => $data) { // code } } 

¿O necesitas algo recursivo? Sería capaz de ayudar más con los datos de ejemplo y un contexto en cómo desea que se devuelvan los datos.

Considere esta matriz multidimensional, espero que esta función ayude.

 $n = array('customer' => array('address' => 'Kenmore street', 'phone' => '121223'), 'consumer' => 'wellington consumer', 'employee' => array('name' => array('fname' => 'finau', 'lname' => 'kaufusi'), 'age' => 32, 'nationality' => 'Tonga') ); iterator($n); function iterator($arr){ foreach($arr as $key => $val){ if(is_array($val))iterator($val); echo '

key: '.$key.' | value: '.$val.'

'; //filter the $key and $val here and do what you want } }