以相同的顺序显示特定文件夹中的文件

时间:2016-12-12 13:17:31

标签: php sorting

我正在尝试以相同的顺序以html格式显示文件系统中的文件。

我有一个这样的文件名,它在文件夹结构中看起来像这样:

ABC_100_name.pdf
ABC_101_name.pdf
ABC_102_name.pdf
ABC_102A1_name.pdf
ABC_103_name.pdf
ABC_103A1_name.pdf
ABC_104_name.pdf

我正在使用scandir()而没有任何排序参数。 我得到的结果是:

ABC_100_name.pdf
ABC_101_name.pdf
ABC_102A1_name.pdf
ABC_102_name.pdf
ABC_103A1_name.pdf
ABC_103_name.pdf
ABC_104_name.pdf

sort()和其他sort-functions似乎都没有帮助我。 我错了什么?

我从scandir()获得的数组是:

array(5) { 
[0]=> string(1) "." 
[1]=> string(2) ".." 
[2]=> string(16) "ABC_100_name.pdf" 
[3]=> string(18) "ABC_101A1_name.pdf" 
[4]=> string(16) "ABC_101_name.pdf" }

2 个答案:

答案 0 :(得分:0)

如果您愿意离开scandir()并使用readdir(),您可以使用示例#2:

if ($handle = opendir('.')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            echo "$entry<br>";
        }
    }
    closedir($handle);
}

请注意,此处的区别在相应的说明中给出:

  

scandir():从目录中返回一个文件和目录数组。

     

readdir():返回目录中下一个条目的名称。 条目按文件系统存储的顺序返回。

答案 1 :(得分:0)

这是你需要的吗?

$customSort = function($s1, $s2) {
    $length = min(strlen($s1), strlen($s2));
    for ($i = 0; $i < $length; ++$i) {
        if ($s1[$i] === $s2[$i]) continue;
        if ($s1[$i] === '_') return -1;
        return strcmp($s1[$i], $s2[$i]);
    }
    return 0;
};

usort($filenames, $customSort);