这个代码可以优化循环浏览文件夹中的照片吗?

时间:2009-07-28 17:21:03

标签: php arrays file loops directory

我已经编写了这段代码,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";
  }
}

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

5 个答案:

答案 0 :(得分:2)

您可以利用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";
    }
}

为了便于阅读,我编辑了一下。

答案 1 :(得分:1)

试试这个:

$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

答案 2 :(得分:0)

您不需要$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";
}

答案 3 :(得分:0)

您可以替换

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(),因为数组键的数值顺序并不重要。

答案 4 :(得分:0)

更简单的方法是使用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";
}
祝你好运!