我遇到了这段代码,它从指定的文件夹中提取图像并使用img
标记输出:
<?php
$url = "./images/";
$handle = opendir ($url);
while (false !== ($file = readdir($handle))) {
if($file != "." && $file != ".." && $file != basename(__FILE__)) {
echo '<a href="'.$url.$file.'" class="lightbox" title="'.$file.'"><img src="'.$url.$file.'" alt="" /></a><br />';
?>
这很有用,但我遇到的唯一问题是图像的排序。
所以,让我们说在我的images
文件夹中,我有这些图片:
2.jpg
b.jpg
a.jpg
1.jpg
如何制作它以便按数字和字母顺序列出图像?我希望编号的图像首先出现在字母表中,所以它会列出这样的图像:
1.jpg
2.jpg
a.jpg
b.jpg
答案 0 :(得分:4)
您需要的是一种自然语言排序。
使用php函数natsort().. 这里..
<?php
$url = "./images/";
$temp_files = scandir($url);
natsort($temp_files);
foreach($temp_files as $file)
{
if($file != "." && $file != ".." && $file != basename(__FILE__))
{
echo '<a href="'.$url.$file.'" class="lightbox" title="'.$file.'"><img src="'.$url.$file.'" alt="" /></a><br />';
}
}
?>
答案 1 :(得分:1)
<?php
$url = "./test/";
$exclude = array('.', '..');
$files = array_diff(scandir($url), $exclude);
natsort($files);
print_r(array_values($files));
?>
<强>输出:强>
Array
(
[0] => 1.jpg
[1] => 2.jpg
[2] => a.jpg
[3] => b.jpg
)
答案 2 :(得分:0)
您可以将链接添加到数组,而不是立即回显它们。然后使用sort($array)
按正确顺序放置它们,并通过在foreach循环中遍历每个循环来回显它们,如:foreach($array as $image) { echo ... }
。
有关详细信息,请参阅:http://php.net/manual/en/function.sort.php
答案 3 :(得分:0)
我会将文件名存储在一个数组中,然后使用sort()
来排序数组。没有更简单的方法可以做到这一点,因为reddir只返回文件名,如下所示:
文件名按文件系统存储的顺序返回。
答案 4 :(得分:0)
scandir()
和glob()
函数都可以返回已排序目录内容的数组,或者您可以继续使用opendir/readdir()
手动构建数组。
如果排序顺序(或缺少顺序)不是您喜欢的顺序,那么您可以使用array sorting functions中的任何一个来操纵您喜欢的顺序。我倾向于natcasesort()
。