我正在尝试以相同的顺序以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" }
答案 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);