ZetCode

PHP natsort 函数

最后修改于 2025 年 3 月 13 日

PHP natsort 函数使用“自然排序”算法对数组进行排序。与常规排序函数不同,它会保留索引关联。

基本定义

natsort 函数实现的排序算法能够以人类习惯的方式对字母数字字符串进行排序。它是区分大小写的。

语法:natsort(array &$array): bool。该函数就地对数组进行排序,成功时返回 true,失败时返回 false。

基本的 natsort 示例

这演示了常规排序和自然排序之间的区别。

basic_natsort.php
<?php

$files = ["img1.png", "img10.png", "img2.png", "img12.png"];

// Regular sort
sort($files);
echo "Regular sort:\n";
print_r($files);

// Natural sort
natsort($files);
echo "\nNatural sort:\n";
print_r($files);

常规排序按字典顺序排序(1, 10, 12, 2),而自然排序按数字顺序排序(1, 2, 10, 12)。输出清楚地显示了差异。

natsort 中的区分大小写

natsort 是区分大小写的,这会影响排序顺序。

case_sensitive.php
<?php

$items = ["Apple", "apple", "Banana", "banana", "1apple", "10apple"];

natsort($items);
print_r($items);

根据 ASCII 码,大写字母排在小写字母前面,因此“Apple”排在“apple”之前。数字排在字母之前,因此“1apple”排在最前面。

混合字母数字排序

natsort 能够智能地处理混合字母数字字符串。

mixed_sorting.php
<?php

$versions = ["version-1.9", "version-1.10", "version-2.0", "version-1.1"];

natsort($versions);
print_r($versions);

该函数可以正确排序版本号:1.1、1.9、1.10,然后是 2.0。这展示了它处理复杂字母数字模式的能力。

使用 natsort 保留键

sort 不同,natsort 会保留键值关联。

key_preservation.php
<?php

$data = [
    "item3" => "value3",
    "item10" => "value10",
    "item1" => "value1",
    "item20" => "value20"
];

natsort($data);
print_r($data);

输出显示数组按值排序,同时保持原始键完好无损。当您需要维护键和值之间的关系时,这非常有用。

对文件名进行排序

使用数字序列对文件名进行排序的实际示例。

file_sorting.php
<?php

$images = [
    "vacation_photo1.jpg",
    "vacation_photo10.jpg",
    "vacation_photo2.jpg",
    "vacation_photo20.jpg",
    "vacation_photo3.jpg"
];

natsort($images);
foreach ($images as $image) {
    echo $image . "\n";
}

这展示了 natsort 如何正确排序带数字的文件,生成 photo1、photo2、photo3、photo10、photo20 的序列。

最佳实践

来源

PHP natsort 文档

本教程介绍了 PHP natsort 函数,并提供了实际示例,展示了其在自然排序场景中的用法。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我自 2007 年起撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有超过十年的经验。

列出 所有 PHP 数组函数