PHP二维数组排序
时间:2026-10-19 07:20 作者:emer 分类: 无
PHP二维数组排序
引言
从数据库查出的列表通常是二维数组,要按价格、销量、时间某一字段升降序排列,单维的sort/rsort直接用会把结构打乱。需要按指定键排序,常用array_multisort和usort两种思路。
array_multisort按字段排
$goods = [
['name' => 'A商品', 'price' => 99],
['name' => 'B商品', 'price' => 39],
['name' => 'C商品', 'price' => 69],
];
// 抽出price列作为排序依据
$price = array_column($goods, 'price');
array_multisort($price, SORT_DESC, $goods);
print_r($goods); // 价格从高到低
array_column先取单列,multisort按该列降序,主数组同步跟着重排。
多字段组合排序
先按销量降序,销量相同再按价格升序:
$sales = array_column($goods, 'sales');
$price = array_column($goods, 'price');
array_multisort($sales, SORT_DESC, $price, SORT_ASC, $goods);
usort自定义比较
规则复杂或中文拼音排序时用usort:
usort($goods, function($a, $b) {
return $a['price'] <=> $b['price']; // 升序
});
太空船运算符<=>比较大小,降序交换$a、$b即可。
注意事项
- array_multisort会改变原数组顺序,需要原数据先备份;
- 比较的字段类型要一致,避免字符串和数字混比;
- usort是稳定排序,同值元素相对位置保留;
- 中文排序可配合intl扩展或自定义映射,别直接靠默认strcmp;
- 数据量大时,优先在SQL层ORDER BY,PHP排序只做内存小列表。
总结
简单单字段排序用array_column加array_multisort,多字段依次传入,复杂规则用usort加<=>比较。能在MySQL ORDER BY解决的就别把数据拉到PHP再排,减轻内存压力。
标签: PHP 排序 二维数组 usort array_multisort