Php 以相同的顺序显示特定文件夹中的文件
我试图以html格式以相同的顺序显示文件系统中的文件 我得到了一个这样的文件名,在文件夹结构中是这样的:Php 以相同的顺序显示特定文件夹中的文件,php,sorting,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_1
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()
还是其他排序函数似乎都不能帮助我解决这个问题。
我做错了什么
我从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:
if($handle=opendir('.')){
while(false!==($entry=readdir($handle))){
如果($entry!=“&&&$entry!=”){
回显“$entry
”;
}
}
closedir($handle);
}
注意,这里的区别在各自的描述中给出:
scandir():返回目录中的文件和目录数组
readdir():返回目录中下一个条目的名称。条目按文件系统存储的顺序返回
这是你需要的吗
$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);
$customSort=函数($s1,$s2){
$length=min(strlen($s1),strlen($s2));
对于($i=0;$i<$length;++$i){
如果($s1[$i]==$s2[$i])继续;
如果($s1[$i]==''''.'返回-1;
返回strcmp($s1[$i],$s2[$i]);
}
返回0;
};
usort($filename,$customSort);
那么对数组排序的结果是什么?在本例中,PHP在下划线前加了一个,LS在下划线后加了一个,但是如果没有您在问题中尝试过的更多细节,很难判断情况是否如此。是的,就是这样。我使用的所有排序函数都在下划线前加了一个。干杯,这不是我想要得到的答案,但经过进一步研究,这似乎是唯一有用的可能性。@zool-是的,我非常理解。我使用了glob()
,但它也不能通过sort(AFAIK)处理循环,因此总是不得不使用这种方法。缺少完整的文件路径是一种PITA,呃。无论如何,谢谢你的投票。谢谢你的回答,我再一次做了一些调整,我在这里使用了类似的方法:对于我的具体情况:)这比你在大多数时候做的要容易得多:D