【问题标题】:Can this code to loop through photos in a folder be optimised?可以优化此代码循环浏览文件夹中的照片吗?
【发布时间】:2009-07-28 17:21:02
【问题描述】:

我已经编写了这段代码,现在已经有 2 年没有使用 PHP 来遍历照片文件夹并按字母顺序将它们写入页面了。这是一个相当简单的请求,但我花了 15 分钟的时间来写。

if ($handle = opendir('photos')) {
  $count = 0;
  $list[] = array();
  while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
      $list[$count] = $file;
      $count ++;
    }
  }
  closedir($handle);
  asort($list);
  $sorted_list = array();
  $sorted_list = array_values($list);
  foreach ($sorted_list as $i => $value) {
    echo "<li><img src=\"photos/$sorted_list[$i]\" alt=\"$sorted_list[$i]\" title=\"\"></li>\n";
  }
}

我是不是写错了?有没有办法改进代码?很高兴收到任何建设性的反馈。

【问题讨论】:

    标签: php arrays file loops directory


    【解决方案1】:

    您可以利用scandir() 函数,该函数将处理读取目录以及对结果进行排序。

    $files = scandir('photos');
    if ($files !== false) 
    {
        foreach($files as $f) {
            if ($f == '..' || $f == '.') continue;      
            echo '<li><img src="photos/'.$f.'" alt="'.$f.'" title=""></li>'."\n";
        }
    }
    

    为了便于阅读,我对其进行了一些编辑。

    【讨论】:

      【解决方案2】:

      试试这个:

      $photos = glob('photos/*');
      foreach($photos as $photo) {
          echo "<li><img src=\"{$photo}" alt=\"{$photo}\" title=\"\"></li>\n";
      
      }
      

      http://us.php.net/manual/en/function.glob.php

      【讨论】:

      • 是的,如果你知道它们是 jpgs,那么使用扩展是个好主意。但理论上它们可以是多种照片格式中的任何一种。
      【解决方案3】:

      您不需要$count。这会给你同样的结果

      $list[] = array();
      while (false !== ($file = readdir($handle))) {
          if ($file != "." && $file != "..") {
              $list[] = $file;
          }
      }
      

      将排序和显示替换为:

      sort($list);
      for ($i = 0; $i < count($list); $i++) {
          echo "<li><img src=\"photos/{$list[$i]}\" alt=\"{$list[$i]}\" title=\"\"></li>\n";
      }
      

      【讨论】:

      • 将 $list[] = array() 更改为 $list = array()。你也想使用 natsort(),而不是 sort()。 :-)
      【解决方案4】:

      你可以替换

      foreach ($sorted_list as $i => $value) {
          echo "<li><img src=\"photos/$sorted_list[$i]\" alt=\"$sorted_list[$i]\" title=\"\"></li>\n";
        }
      

      foreach ($sorted_list as $value) {
          echo "<li><img src=\"photos/$value\" alt=\"$value\" title=\"\"></li>\n";
      }
      

      那么你不需要调用array_values(),因为数组键不按数字顺序并不重要。

      【讨论】:

        【解决方案5】:

        更简单的方法是使用scandir 函数:

        $dir = 'photos';
        $files = array_diff( scandir($dir), array(".", "..") );
        foreach ($files as $i => $value) {
            echo "<li><img src=\"photos/$value\" alt=\"$value\" title=\"\"></li>\n";
        }
        

        祝你好运!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-20
          • 2015-01-14
          • 2017-05-23
          • 2012-06-27
          • 2015-12-07
          相关资源
          最近更新 更多