php所有内置排序函数均原地修改数组并返回布尔值,true表示执行成功,false仅在异常时出现;实际开发中几乎总返回true,结果应直接使用原数组而非返回值。

PHP所有内置排序函数(sort、asort、ksort、usort 等)的返回值都只是操作成功与否的布尔信号,不是排序后的数组 —— 它们全部原地修改数组,不产生新数组。
为什么返回 true 或 false 却几乎总为 true
这些函数签名统一为 bool function_name(array &$array, ...),返回 true 表示“排序逻辑执行完成”,false 仅在极少数异常下触发(比如传入了非数组类型、内存严重不足等)。实际开发中,你几乎不会遇到 false 返回值。
-
sort($arr)成功后,$arr已被重排并重置键名,返回值true不代表“得到了新数组” - 误用
$new = sort($arr)会导致$new是true,而$arr才是真正被改过的数组 —— 这是新手最常踩的坑 - PHP 8+ 对参数类型更严格,传错类型(如
null或对象)才更容易触发false,但此时通常会先抛出TypeError
usort 和 uasort 的返回值陷阱
usort 和 uasort 的返回值行为和其他排序函数一致:只返回 true / false,且几乎总是 true。但它们的**比较函数**返回值才是关键:
- 你的回调函数必须返回
int:负数($a )、零(相等)、正数(<code>$a > $b) - 若回调返回
float(如return $a - $b在浮点数场景下),PHP 会强制转为int,导致0.99和0.1都变0,排序错乱 - PHP 8.0+ 起,如果回调返回非整数且启用了严格类型检查,会直接报
TypeError
哪些函数不返回 true/false?
没有。所有以 sort 结尾的 PHP 内置排序函数都遵循同一契约:返回 bool,原地修改数组。唯一例外是 array_multisort —— 它也返回 bool,但行为更复杂(可排序多个数组并保持关联),同样不返回新数组。
真正容易被忽略的是:**你永远不该依赖返回值来获取结果,而应直接使用传入的那个变量**。哪怕你写 $result = usort($data, $fn),$result 是 true,$data 才是你想要的数据。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











