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 
           ) 
  ) 
esafwan
fuente
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.

Ish
fuente
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.

obsergiu
fuente
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.

SilverbackNet
fuente
2
foreach($array as $item=>$values){
     echo $values->filepath;
    }
Kavinda Harshana
fuente
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)))
{
    ...
}
jakoubekcz
fuente
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