recorrer - Iteración sobre una matriz asociativa compleja en PHP
manejo de array en php (7)
¿Puedes recorrer todos los elementos de "parte [n]" y usar isset para ver si realmente existen o no?
¿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?
Debería poder usar una declaración 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";
}
}
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.
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
}
}
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 ''<p>key: ''.$key.'' | value: ''.$val.''</p>'';
//filter the $key and $val here and do what you want
}
}
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.''<br />'';
}
Ver