php中的sort()是如何排列目录结构数组的?

How does sort() in php arranges directory structure array?

我正在从官方手册中学习 php,并且刚开始学习数组部分的示例 #13 https://www.php.net/manual/en/language.types.array.php 当我 运行 本地 windows 中的示例代码时10 使用命令行中的 php localserver 我观察到 sort() 实际上对数组进行了排序。我尝试了以下代码:

<?php
// fill an array with all items from a directory
$handle = opendir('.');
while (false !== ($file = readdir($handle))) {
    $files[] = $file;
}
print_r($files);
sort($files);
print_r($files);
closedir($handle); 

?>

我得到的输出如下:

Array
(
    [0] => .
    [1] => ..
    [2] => .ftpquota
    [3] => Ftp fxg710ehhrpx.xml
    [4] => index.html
    [5] => index.php
    [6] => Logo
    [7] => myphp
    [8] => OnlineSlap.rar
)
Array
(
    [0] => .
    [1] => ..
    [2] => .ftpquota
    [3] => Ftp fxg710ehhrpx.xml
    [4] => Logo
    [5] => OnlineSlap.rar
    [6] => index.html
    [7] => index.php
    [8] => myphp
)

如您所见,在使用 sort 之前,数组是按字母顺序排列的运行,但在 sort() 之后,顺序变成了 运行dom。

为什么数组得到 unsorted 排序的预期行为是什么?

谢谢。

您的数组正在按区分大小写的顺序进行排序(sort), so entries starting with A-Z come before those starting with a-z. If you want to retain a case-insensitive order, you can call sort 的默认顺序与 SORT_FLAG_CASE 标志结合 SORT_STRING 以实现此目的:

sort($files, SORT_FLAG_CASE | SORT_STRING);
print_r($files);

输出

Array
(
    [0] => .
    [1] => ..
    [2] => .ftpquota
    [3] => Ftpfxg710ehhrpx.xml
    [4] => index.html
    [5] => index.php
    [6] => Logo
    [7] => myphp
    [8] => OnlineSlap.rar
)

Demo on 3v4l.org

请注意,根据您对 Test2.jpgTest10.jpg 等文件名进行排序的要求,您可能需要使用 natcasesort,因为它也会按数字排序。例如,

$files = array (
    0 => 'test2.jpg',
    1 => 'Test10.jpg'
);
shuffle($files);
sort($files, SORT_FLAG_CASE | SORT_STRING);
print_r($files);

natcasesort($files);
print_r($files);

输出:

Array
(
    [0] => Test10.jpg
    [1] => test2.jpg
)
Array
(
    [1] => test2.jpg
    [0] => Test10.jpg
)

Demo on 3v4l.org