我已经编写了这段代码,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";
}
}
我写错了吗?有没有办法改进代码?很高兴收到任何建设性的反馈。
答案 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";
}
答案 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";
}
祝你好运!