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.