遍历数组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 as&$ value){print_r($ value); 回声“ <br/> <hr />”; }
esafwan 2010年

Answers:


258

使用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
同时checkout var_export,它输出有效的PHP代码。您可以将其保存到文件中,然后在将其放入主代码之前编写代码以在其上循环。

这是使用for循环方法的问题。我读到某个索引可能不存在的地方??
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中操作这些字段。


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

3
用其他三个已有的答案回答一个已有八年历史的问题时,解释您的答案为该问题带来了什么新方法很有用。同样在这种情况下,问题是要打印“每个文件路径和文件名”而不是仅打印文件路径。
詹森·艾勒

1
应该是echo $ values ['filepath']; 因为$ values是一个数组,而不是一个对象。
Daniel Faure

-1

您也可以使用此方法,而无需创建其他变量或像foreach()一样复制内存中的数据。

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

2
从PHP 7.2.0开始不推荐使用每个函数。“强烈建议不要依赖此功能” php.net/manual/en/function.each.php
asiop,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.