Bucle a través de una matriz php


109

Tengo esta matriz ... ¿cómo se imprime cada ruta de archivo y nombre de archivo? ¿Cuál es la mejor manera de hacer esto?

  Array ( 
    [0] => Array ( 
             [fid] => 14 
             [list] => 1 
             [data] => Array ( 
                         [alt] => 
                         [title] => 
                       )
             [uid] => 1 
             [filename] => trucks_10785.jpg 
             [filepath] => sites/default/files/trucks_10785.jpg 
             [filemime] => image/jpeg 
             [filesize] => 143648 
             [status] => 1 
             [timestamp] => 1291424171 
             [nid] => 8 
           ) 
    [1] => Array ( 
             [fid] => 19 
             [list] => 1 
             [data] => Array ( 
                         [alt] => 
                         [title] => 
                       ) 
             [uid] => 1 
             [filename] => school.jpg 
             [filepath] => sites/default/files/school.jpg 
             [filemime] => image/jpeg 
             [filesize] => 115355 
             [status] => 1 
             [timestamp] => 1292029563 
             [nid] => 8 
           ) 
    [2] => Array ( 
             [fid] => 20 
             [list] => 1 
             [data] => Array ( 
                         [alt] => 
                         [title] => 
                       )     
             [uid] => 1 
             [filename] => Life_is_wonderful_by_iNeedChemicalX.jpg 
             [filepath] => sites/default/files/Life_is_wonderful_by_iNeedChemicalX_0.jpg 
             [filemime] => image/jpeg 
             [filesize] => 82580 
             [status] => 1 
             [timestamp] => 1292029572 
             [nid] => 8 
           )
    [3] => Array ( 
             [fid] => 21 
             [list] => 1 
             [data] => Array ( 
                         [alt] => 
                         [title] => 
                       ) 
             [uid] => 1 
             [filename] => school_rural.jpg 
             [filepath] => sites/default/files/school_rural.jpg 
             [filemime] => image/jpeg 
             [filesize] => 375088 
             [status] => 1 
             [timestamp] => 1292029582 
             [nid] => 8 
           ) 
  ) 

foreach ($ nodo-> campo_imagen como & $ valor) {print_r ($ valor); echo "<br/> <hr />"; }
esafwan

Respuestas:


261

Usando foreachbucle sin llave

foreach($array as $item) {
    echo $item['filename'];
    echo $item['filepath'];

    // to know what's in $item
    echo '<pre>'; var_dump($item);
}

Usando foreachbucle con llave

foreach($array as $i => $item) {
    echo $item[$i]['filename'];
    echo $item[$i]['filepath'];

    // $array[$i] is same as $item
}

Usando forbucle

for ($i = 0; $i < count($array); $i++) {
    echo $array[$i]['filename'];
    echo $array[$i]['filepath'];
}

var_dump es una función realmente útil para obtener una instantánea de una matriz u objeto.


3
También checkout var_export, que imprime código PHP válido. Puede guardar eso en un archivo, luego escribir el código para recorrerlo allí antes de ponerlo en su código principal.
Ben

Aquí hay un problema con el uso del método de bucle for. Leí en alguna parte que el índice podría no existir.
bakalolo

1
Si el índice no se define como ['a', 'b', 'c'], entonces sus valores son 0,1 y 2.
Ish

11

Ok, sé que hay una respuesta aceptada, pero ... para casos más especiales, también puedes usar esta:

array_map(function($n) { echo $n['filename']; echo $n['filepath'];},$array);

O de una manera más poco compleja:

function printItem($n){
    echo $n['filename'];
    echo $n['filepath'];
}

array_map('printItem', $array);

Esto le permitirá manipular los datos de una manera más sencilla.


6

Comenzando simple, sin HTML:

foreach($database as $file) {
    echo $file['filename'] . ' at ' . $file['filepath'];
}

Y de lo contrario, puede manipular los campos en foreach.


2
foreach($array as $item=>$values){
     echo $values->filepath;
    }

3
Al responder una pregunta de hace ocho años con otras tres respuestas existentes, es útil explicar qué nuevo enfoque aporta su respuesta a la pregunta. También en este caso la cuestión era imprimir "cada una de las rutas de archivo y el nombre de archivo" para no imprimir solo la ruta de archivo.
Jason Aller

1
Debe ser echo $ valores ['ruta de archivo']; porque as $ values ​​es una matriz, no un objeto.
Daniel Faure

-1

También puede usar esto sin crear variables adicionales ni copiar los datos en la memoria como lo hace foreach ().

while (false !== (list($item, $values) = each($array)))
{
    ...
}

2
cada función ha quedado obsoleta a partir de PHP 7.2.0. "No se recomienda confiar en esta función" php.net/manual/en/function.each.php
asiop
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.