Перебрать массив php


109

У меня есть этот массив ... как вы печатаете каждый путь к файлу и имя файла? Как лучше всего это сделать?

  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 как & $ значение) {print_r ($ value); эхо "<br/> <hr />"; }
esafwan

Ответы:


261

Использование foreachпетли без ключа

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

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

Использование foreachцикла с ключом

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

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

Использование forцикла

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

var_dump действительно полезная функция для получения снимка массива или объекта.


3
Также проверка var_export, которая печатает действительный код PHP. Вы можете сохранить это в файл, а затем написать код, чтобы перебрать его там, прежде чем вставлять его в свой основной код.
Бен

здесь проблема с использованием метода цикла. Я где-то читал, что индекса может не существовать ??
bakalolo

1
Если индекс не определен как ['a', 'b', 'c'], то его значения равны 0,1 и 2.
Ish

11

Хорошо, я знаю, что есть принятый ответ, но ... для других особых случаев вы также можете использовать этот:

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

Или более несложно:

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

array_map('printItem', $array);

Это позволит вам упростить управление данными.


6

Начнем с простого, без HTML:

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

Иначе вы можете манипулировать полями в foreach.


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

3
Отвечая на вопрос восьмилетней давности тремя другими существующими ответами, полезно объяснить, какой новый подход привносит ваш ответ к вопросу. Также в этом случае вопрос заключался в том, чтобы печатать «каждый путь к файлу и имя файла», а не печатать только путь к файлу.
Джейсон Аллер

1
Это должно быть echo $ values ​​['filepath']; поскольку as $ values ​​- это массив, а не объект.
Даниэль Фор,

-1

Вы также можете использовать это, не создавая дополнительных переменных и не копируя данные в памяти, как это делает foreach ().

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

2
каждая функция устарела с PHP 7.2.0. «Крайне не рекомендуется полагаться
asiop
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.