用usort()配合匿名函数是最直接的写法 PHP 没有内置的「按字段名排序二维数组」函数,usort()是最常用也最可控的方式。它允许你自定义比较逻辑,适配任意字段(包括嵌套、空值、类型混合等
用 usort() 配合匿名函数是最直接的写法PHP 没有内置的「按字段名排序二维数组」函数,usort() 是最常用也最可控的方式。它允许你自定义比较逻辑,适配任意字段(包括嵌套、空值、类型混合等场景)。 关键点在于:比较函数必须返回整数(负数/0/正数),不能只写 $a['age'] 这种布尔表达式——那会强制转成 0 或 1,导致排序错乱。
字符串字段排序别忘了用 strcmp() 或 strnatcmp()直接用减法 - 对字符串做运算会触发隐式转换(比如 'apple' - 'banana' 变成 0 - 0),结果全是 0,数组顺序不变甚至打乱。
错误示例:return $a['name'] - $b['name']; → 全是 0,白排。 要保持键名关联关系?用 uasort() 替代 usort()usort() 会重置数组键为数字索引(0,1,2…),如果你的二维数组是用字符串键(比如 ID 作 key)构建的,且后续还要靠原 key 查找,就必须用 uasort()。
性能敏感或多次排序?考虑提前提取排序列 + array_multisort()当数组很大(几千行以上)且需按多个字段排序(比如先按 status,再按 created_at),usort() 的每次回调都要重复取字段,有轻微开销。array_multisort() 可以一次性提取所有排序列,效率略高,写法也更声明式。
不过日常几百条数据,usort() 更直观,没必要过早优化。 |
2019-06-28
2019-10-03
2019-07-04
2019-06-22
2019-02-12