Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 以相同的顺序显示特定文件夹中的文件_Php_Sorting - Fatal编程技术网

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

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

我试图以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()
还是其他
排序函数似乎都不能帮助我解决这个问题。
我做错了什么


我从
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