Passa attraverso un array php


109

Ho questo array ... come si stampa ciascuno dei filepath e dei nomi dei file? Qual è il modo migliore per farlo?

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

Risposte:


261

Utilizzo di foreachloop senza chiave

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

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

Usando il foreachciclo con la chiave

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

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

Utilizzando forloop

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

var_dump è una funzione davvero utile per ottenere un'istantanea di un array o di un oggetto.


3
Anche il checkout var_export, che stampa un codice PHP valido. Puoi salvarlo in un file, quindi scrivere il codice per eseguirlo in loop prima di inserirlo nel codice principale.
Ben

è qui un problema con l'utilizzo del metodo del ciclo for. Ho letto da qualche parte che l'indice potrebbe non esistere ??
Bakalolo

1
Se index non è definito come ['a', 'b', 'c'], allora i suoi valori sono 0,1 e 2.
Ish

11

Ok, so che esiste una risposta accettata ma ... per casi più speciali potresti usare anche questa:

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

O in un modo più non complesso:

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

array_map('printItem', $array);

Ciò ti consentirà di manipolare i dati in modo più semplice.


6

Iniziare in modo semplice, senza HTML:

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

E puoi altrimenti manipolare i campi nel foreach.


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

3
Quando si risponde a una domanda di otto anni con altre tre risposte esistenti, è utile spiegare quale nuovo approccio porta la propria risposta alla domanda. Anche in questo caso la domanda era di stampare "ciascuno dei filepath e filename" per non stampare solo il filepath.
Jason Aller

1
Dovrebbe essere echo $ values ​​['filepath']; poiché $ valori è un array, non un oggetto.
Daniel Faure,

-1

Puoi usare anche questo senza creare variabili aggiuntive né copiare i dati nella memoria come fa foreach ().

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

2
ogni funzione è stata deprecata a partire da PHP 7.2.0. "Basandosi su questa funzione è altamente sconsigliato" php.net/manual/en/function.each.php
asiop
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.