按数字和字母顺序排序

3

我遇到了这段代码,它从指定的文件夹中获取图像,并使用 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
5个回答

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
这个很好用,谢谢!我甚至不知道这个函数的存在。 - Kevin Jung
如果我想要相反的顺序呢?先按字母顺序排列,然后再按数字顺序排列怎么办? - Matías Cánepa

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
)

0

不要立即回显它们,你可以将链接添加到一个数组中。然后使用 sort($array) 将它们按正确的顺序排列,并通过 foreach 循环逐个回显它们,如下所示:foreach($array as $image) { echo ... }

更多信息,请参见:http://php.net/manual/zh/function.sort.php


2
另外补充原始帖子,如果您想要做像排序这样的事情,您可能需要查看 php.net。如果您在来这里之前这样做了,您可能就不需要问这个问题了。 - zamN

0
我会将文件名存储在一个数组中,然后使用 sort() 对数组进行排序。由于 reddir 仅以以下方式返回文件名,因此没有更简单的方法可用:

文件名按照文件系统存储它们的顺序返回。


0

scandir()glob()函数都可以返回已排序的目录内容数组,或者您可以继续使用opendir/readdir()手动构建一个数组。

如果排序顺序(或缺乏)不是您喜欢的,那么您可以使用任何数组排序函数来按照自己的喜好进行排序。我倾向于使用natcasesort()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接