本文介绍如何使用 usort() 结合 array_column() 和 max(),依据每个元素内 sizes 数组中所有 weight 的最大值,对顶层数组进行升序或降序排序。
本文介绍如何使用 `usort()` 结合 `array_column()` 和 `max()`,依据每个元素内 `sizes` 数组中所有 `weight` 的最大值,对顶层数组进行升序或降序排序。
在处理具有深层嵌套结构的 PHP 数组时,常见的 array_multisort() 往往难以直接作用于动态深度的子数组字段(如本例中每个 'sizes' 内含多个 'weight')。此时,更灵活、语义清晰的方案是使用 usort() 配合自定义比较逻辑。
核心思路是:对每个顶层元素(即每个含 'sizes' 键的子数组),先提取其全部 weight 值构成一维数组(通过 array_column($item['sizes'], 'weight')),再取其中最大值(max()),最后用太空船操作符 zuojiankuohao
php
cn=> 比较两个顶层元素对应的最大 weight,从而决定排序顺序。
✅
降序排序(最高 weight 优先)
:
✅
升序排序(最低 weight 优先)
:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
⚠️ 注意事项:
确保每个 $a['sizes'] 和 $b['sizes'] 均为非空数组,否则 array_column() 可能返回 false,max(false) 将触发警告。建议增加防御性检查:
若需稳定排序(相同最大 weight 时保持原始相对顺序),PHP 7.4+ 中 usort() 默认不稳定;可引入索引辅助实现稳定行为。
此方法时间复杂度为
O(n × m)
(n 为顶层元素数,m 为各 sizes 平均长度),适用于中等规模数据;超大规模场景建议预计算并缓存 max_weight 字段。
该方案简洁、可读性强,无需手动遍历或额外辅助数组,是处理“按子集合极值排序顶层结构”类问题的标准实践。
usort($array, function($a, $b) {
return max(array_column($b['sizes'], 'weight'))
<=>
max(array_column($a['sizes'], 'weight'));
});usort($array, function($a, $b) {
return max(array_column($a['sizes'], 'weight'))
<=>
max(array_column($b['sizes'], 'weight'));
});$aWeights = !empty($a['sizes']) ? array_column($a['sizes'], 'weight') : [0];
$bWeights = !empty($b['sizes']) ? array_column($b['sizes'], 'weight') : [0];
return max($aWeights) <=> max($bWeights);