Pregunta

¿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 sólo necesito iterar $searches[0] a través de $searches[n], pero también $searches[0]["part0"] a través de $searches[n]["partn"].La parte difícil es que diferentes índices tienen diferentes números de partes (a algunos les puede faltar una o dos).

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

¿Fue útil?

Solución

Nido dos foreach bucles:

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

Otros consejos

Sé que se trata de nigromancia, pero iterar sobre matrices multidimensionales es fácil con Spl Iterators

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

foreach($iterator as $key=>$value) {
    echo $key.' -- '.$value.'<br />';
}

Ver

Parece un buen lugar para una función recursiva, especialmente.si tendrás 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 utilizar una declaración foreach anidada

desde el manual de 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 simplemente recorrer todos los elementos "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?Podría ayudar más con datos de ejemplo y un contexto sobre cómo desea que se devuelvan los datos.

Considere esta matriz multidimensional, espero que esta función le 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
    }

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top