自然排序
本课属于 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() 会直接修改原数组。这让它特别适合整理文件列表、版本号,或任何包含数字且应按数值而不是按字母顺序排序的字符串数据。
挑战
简单你会收到一个输入:一个 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);
?>这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: PHP 在线编译器