Loop através de um array php

109

Eu tenho essa matriz ... como você imprime cada caminho de arquivo e nome de arquivo? Qual é a melhor maneira de fazer isso?

  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
fonte
foreach ($ node-> field_image as & $ value) {print_r ($ value); echo "<br/> <hr />"; }
esafwan

Respostas:

259

Usando foreachloop sem chave

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

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

Usando foreachloop com chave

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

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

Usando forloop

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

var_dump é uma função realmente útil para obter um instantâneo de um array ou objeto.

Ish
fonte
3
Também checkout var_export, que imprime código PHP válido. Você pode salvá-lo em um arquivo e escrever o código para fazer um loop nele antes de colocá-lo em seu código principal.
Ben
é aqui um problema com o uso do método de loop for. Eu li em algum lugar que o índice pode não existir ??
Bakalolo,
1
Se o índice não for definido como ['a', 'b', 'c'], então seus valores são 0,1 e 2.
Ish
11

Ok, eu sei que há uma resposta aceita, mas ... para casos mais especiais, você também pode usar esta:

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

Ou de uma forma menos complexa:

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

array_map('printItem', $array);

Isso permitirá que você manipule os dados de uma maneira mais fácil.

obsergiu
fonte
6

Começando simples, sem HTML:

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

E você pode manipular os campos no foreach.

SilverbackNet
fonte
2
foreach($array as $item=>$values){
     echo $values->filepath;
    }
Kavinda Harshana
fonte
3
Ao responder a uma pergunta de oito anos com três outras respostas existentes, é útil explicar que nova abordagem sua resposta traz para a pergunta. Também neste caso a questão era imprimir "cada caminho de arquivo e nome de arquivo" para não imprimir apenas o caminho de arquivo.
Jason Aller
1
Deve ser echo $ values ​​['filepath']; pois as $ values ​​é um array, não um objeto.
Daniel Faure
-1

Você também pode usar isso sem criar variáveis ​​adicionais nem copiar os dados na memória como foreach () faz.

while (false !== (list($item, $values) = each($array)))
{
    ...
}
Jakoubekcz
fonte
2
cada função está obsoleta a partir do PHP 7.2.0. "Não é recomendável confiar
asiop