sort()用于索引数组升序排序并重置键名,asort()保留关联数组键名按值排序,ksort()按键名字符串排序,array_multisort()配合array_column()实现多维数组字段排序,所有排序函数均原地修改并返回布尔值。

sort() 是最直接的升序排序函数,但选哪个函数取决于数组类型和是否要保留键值关系。
索引数组用 sort() 或 rsort()
数值或字符串组成的纯索引数组(键为 0,1,2…),直接用 sort() 升序,rsort() 降序。它会重置键名,从 0 开始连续编号。
- 默认按字符串规则比较:
sort(['10', '2', '100'])结果是['10', '100', '2'](因为字符比较 '1' - 数字排序必须加
SORT_NUMERIC标志:sort([10, 2, 100], SORT_NUMERIC)→[2, 10, 100] -
SORT_STRING强制当字符串比(比如含前导零的版本号);SORT_NATURAL更适合人眼习惯:sort(['v10', 'v2', 'v1'], SORT_NATURAL)→['v1', 'v2', 'v10']
关联数组按值升序用 asort()
当你有 ['name' => 'Alice', 'age' => 30] 这类键值对,又想按值排(比如按姓名字母顺序),但不能丢掉 'name' 这个键名 —— 就得用 asort()。
- 它不改变键名,只重排顺序:
$data = ['z' => 1, 'a' => 3]; asort($data);→['z'=>1, 'a'=>3](因为 1 - 同样支持
$flags参数,比如中文字段需配合setlocale(LC_COLLATE, 'zh_CN.UTF-8')再用SORT_LOCALE_STRING - 注意:如果值相同,PHP 8+ 保持原始相对顺序;8.0 之前行为未定义
关联数组按键升序用 ksort()
想让 ['zebra' => 5, 'apple' => 2] 按键名('apple'、'zebra')字母序排列,就用 ksort()。它只看键,不管值。
- 键名会被当作字符串比较,所以
ksort(['10' => 'x', '2' => 'y'])→ 键顺序是['10','2'](字符序) - 需要数字键序?得先转成整型键再用
SORT_NUMERIC:ksort($arr, SORT_NUMERIC) - 大小写敏感:默认
'Zebra'排在'apple'前面(ASCII 中大写字母靠前),加SORT_FLAG_CASE可忽略
多维数组按某个字段升序用 array_multisort() + array_column()
面对 [ ['name'=>'Tom','score'=>85], ['name'=>'Jerry','score'=>92] ] 这种结构,不能直接 sort(),得先抽字段再联动排序。
立即学习“PHP免费学习笔记(深入)”;
- 核心组合:
array_multisort(array_column($users, 'score'), SORT_ASC, $users) -
array_column()必须存在且非空,否则array_multisort()会报 Warning 并失败 - 支持多级排序:先按 score 升序,score 相同时按 name 降序:
array_multisort(array_column($users, 'score'), SORT_ASC, array_column($users, 'name'), SORT_DESC, $users) - PHP 7.0+ 才支持
array_column()对对象数组提取属性(需配合get_object_vars()预处理)
sort() 和 asort() 等函数都是原地修改数组,不返回新数组;且它们返回布尔值(true/false),不是排序后的数组**。写成 $new = sort($old) 就会把 $new 设成 true,而不是你想要的数据。



















