Menu
CoddyTech

自然排序

本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 24 课,共 68 课。

虽然 PHP 的标准排序函数在大多数情况下都能很好地工作,但对包含数字的字符串进行排序时,可能会产生意想不到的结果。natsort() 函数使用“自然排序”算法解决了这个问题,它对字符串的排序方式符合人们通常的预期。

看这个包含文件名的示例:

<?php
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];

// 普通的 sort() 排序结果是:file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
print_r($files);

// 重置数组
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];

// natsort() 排序结果是:file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);
?>

区别至关重要:普通的 sort() 会逐个字符比较字符串,因此 "file10.txt" 会排在 "file2.txt" 前面,因为在 ASCII 中,“1”排在“2”前面。不过,natsort() 能识别其中的数字部分,并按数值大小排序,因此会像你自然预期的那样,让 "file2.txt" 排在 "file10.txt" 前面。

和其他 PHP 排序函数一样,natsort() 会直接修改原数组。这让它特别适合整理文件列表、版本号,或任何包含数字且应按数值而不是按字母顺序排序的字符串数据。

challenge icon

挑战

简单

你会收到一个输入:一个 JSON 格式的软件版本号数组。读取输入,将 JSON 字符串转换为数组,使用 natsort() 按自然顺序对版本号排序,然后使用 print_r() 输出排序后的数组。

输入格式:一行内容,包含一个版本字符串组成的 JSON 数组(示例:["v1.10","v1.2","v1.20","v1.3"])

预期输出:使用 print_r() 显示按自然顺序排序后的数组

亲手试试

<?php
// 读取输入
$input = fgets(STDIN);

// 将 JSON 字符串转换为数组
$versions = (array)json_decode($input, true);

// TODO:在下方编写代码,使用 natsort() 对数组排序


// 输出排序后的数组
print_r($versions);
?>
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: PHP 在线编译器