按数字和字母顺序排序

时间:2011-03-29 21:02:23

标签: php html sorting

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

答案 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()