【问题标题】:What is the best way to loop through this array in PHP?在 PHP 中循环遍历这个数组的最佳方法是什么?
【发布时间】:2010-12-11 01:11:43
【问题描述】:

我有这个数组...你如何打印每个文件路径和文件名?最好的方法是什么?

  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);回声“

    ”; }

标签: php arrays printing loops


【解决方案1】:

使用不带键的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 是一个非常有用的函数,可以获取数组或对象的快照。

【讨论】:

  • 还结帐var_export,它会打印有效的PHP代码。您可以将其保存到文件中,然后编写代码以在其中循环,然后将其放入主代码中。
  • 这里是使用for循环方法的问题。我在某处读到该索引可能不存在??
  • 如果索引没有像['a', 'b', 'c']那样定义,那么它的值是0,1和2。
  • 我可能弄错了,但关键示例的 foreach 循环不应该使用 echo $array[$i] 而不是 echo $item[$i]
【解决方案2】:

对于更特殊的情况,你也可以使用这个:

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

或者以更简单的方式:

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

array_map('printItem', $array);

这将使您能够以更简单的方式操作数据。

【讨论】:

    【解决方案3】:

    从简单的开始,没有 HTML:

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

    您还可以通过其他方式操作 foreach 中的字段。

    【讨论】:

      【解决方案4】:
      foreach($array as $item => $values) {
          echo $values->filepath;
      }
      

      【讨论】:

      • 当用其他三个现有答案回答一个八年前的问题时,解释您的答案为该问题带来了什么新方法很有用。同样在这种情况下,问题是打印“每个文件路径和文件名”而不是只打印文件路径。
      • 应该是 echo $values['filepath'];因为 $values 是一个数组,而不是一个对象。
      【解决方案5】:

      您也可以使用它,而无需创建额外的变量,也无需像 foreach() 那样复制内存中的数据。

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

      【讨论】:

      猜你喜欢
      • 2019-11-20
      • 1970-01-01
      • 2021-07-16
      • 2011-07-17
      • 1970-01-01
      • 2016-01-14
      • 2010-09-05
      • 1970-01-01
      相关资源
      最近更新 更多