sort() 函数对数组值升序排序并重置为数字索引,忽略原键名;通过 $flags 参数控制比较方式,如 SORT_REGULAR(默认)、SORT_STRING、SORT_NATURAL 等。
PHP 中的 sort() 是一个内置函数,用来对数组的**值(values)按升
序重新排列**,并且直接修改原数组——不保留原来的数字键名,而是重置为从 0 开始的连续整数索引。
它最核心的特点
– 只管值,不管键;
– 升序是默认行为(降序用 rsort());
– 总是返回 true(PHP 8.2+),不是布尔真假判断依据;
– 原数组结构被“重排”,原有键名全部丢弃。
怎么控制排序方式?靠 flags 参数
第二个可选参数 $flags 决定 PHP 怎么比较两个值。常见组合有:
- SORT_REGULAR:默认,按类型原样比较(比如 '10'
- SORT_NUMERIC:强制转成数字比('10' > '2',符合数值直觉)
- SORT_STRING:统一当字符串比(区分大小写)
- SORT_NATURAL:自然排序,适合含数字的字符串('item2'
-
SORT_FLAG_CASE:必须和
SORT_STRING或SORT_NATURAL配合使用,实现不区分大小写 - 多个 flag 可用位运算符
|组合,例如:sort($arr, SORT_NATURAL | SORT_FLAG_CASE)
要注意的坑
– 混合类型数组(比如同时有字符串、数字、null)用 SORT_REGULAR 时结果可能出人意料;
– 关联数组如果想保留键值对应关系,别用 sort(),改用 asort();
– PHP 8.0+ 起,相等元素会保持原始顺序(稳定排序),之前版本不保证;
– 排序后内部指针自动回到第一个元素,遍历前不用手动 reset()。
一个典型例子
// 原数组$fruits = ['banana', 'Apple', 'cherry', 'apple'];
// 不区分大小写的自然排序sort($fruits, SORT_NATURAL | SORT_FLAG_CASE);
// 结果:['Apple', 'apple', 'banana', 'cherry']
基本上就这些。用对 flag,就能让 sort 处理各种常见排序需求,不复杂但容易忽略细节。








