排序多维内部数组 PHP
Sort multi-dimentional inner array PHP
我一直在尝试对多维内部数组进行排序,我尝试了 array_multisort() 方法,但在我的情况下不起作用。
$array = [
[
'sizes'=>[
[
'weight'=>25,
'height'=>110
], [
'weight'=>45,
'height'=>110
],
]
],
[
'sizes'=>[
[
'weight'=>80,
'height'=>120
],[
'weight'=>20,
'height'=>120
]
]
]
];
我需要根据权重对上述数组进行排序,如果按最高权重数组排序,应该 return 大小块具有最高权重,反之亦然。在这种情况下,“权重”:80 是最高的,如果按最低的第一个“权重”排序:20 应该排在第一位。
SORT_ASC 和 SORT_DESC
排序后的预期输出
$array = [
[
'sizes'=>[
[
'weight'=>80,
'height'=>120
],[
'weight'=>20,
'height'=>120
]
]
],
[
'sizes'=>[
[
'weight'=>25,
'height'=>110
], [
'weight'=>45,
'height'=>110
],
]
]
];
您可以使用 array_column
从 sub-array 中提取权重值,然后对这些使用 max
,然后使用 <=>
比较运算符比较这两个值最大值:
usort($array, function($a, $b) {
return max(array_column($b['sizes'], 'weight')) <=>
max(array_column($a['sizes'], 'weight'));
});
这适用于降序,对于升序,您需要分别调换 $a 和 $b。乘以-1.
我一直在尝试对多维内部数组进行排序,我尝试了 array_multisort() 方法,但在我的情况下不起作用。
$array = [
[
'sizes'=>[
[
'weight'=>25,
'height'=>110
], [
'weight'=>45,
'height'=>110
],
]
],
[
'sizes'=>[
[
'weight'=>80,
'height'=>120
],[
'weight'=>20,
'height'=>120
]
]
]
];
我需要根据权重对上述数组进行排序,如果按最高权重数组排序,应该 return 大小块具有最高权重,反之亦然。在这种情况下,“权重”:80 是最高的,如果按最低的第一个“权重”排序:20 应该排在第一位。
SORT_ASC 和 SORT_DESC
排序后的预期输出 $array = [
[
'sizes'=>[
[
'weight'=>80,
'height'=>120
],[
'weight'=>20,
'height'=>120
]
]
],
[
'sizes'=>[
[
'weight'=>25,
'height'=>110
], [
'weight'=>45,
'height'=>110
],
]
]
];
您可以使用 array_column
从 sub-array 中提取权重值,然后对这些使用 max
,然后使用 <=>
比较运算符比较这两个值最大值:
usort($array, function($a, $b) {
return max(array_column($b['sizes'], 'weight')) <=>
max(array_column($a['sizes'], 'weight'));
});
这适用于降序,对于升序,您需要分别调换 $a 和 $b。乘以-1.