我正在尝试按优先级对多维数组进行排序:
$arr['fruits'][0]['banana']['color'] = 'yellow';
$arr['fruits'][0]['banana']['qty'] = '50';
$arr['fruits'][0]['banana']['priority'] = 3;
$arr['fruits'][1]['apple']['color'] = 'red';
$arr['fruits'][1]['apple']['qty'] = '75';
$arr['fruits'][1]['apple']['priority'] = 1;
$arr['fruits'][2]['grape']['color'] = 'purple';
$arr['fruits'][2]['grape']['qty'] = '100';
$arr['fruits'][2]['grape']['priority'] = 5;
如何对此数组进行排序以获取按优先级排序的值?
$arr['fruits'][0]['apple']['color'] = 'red';
$arr['fruits'][0]['apple']['qty'] = 75;
$arr['fruits'][1]['banana']['color'] = 'yellow';
$arr['fruits'][1]['banana']['qty'] = 50;
$arr['fruits'][2]['grape']['color'] = 'purple';
$arr['fruits'][2]['grape']['qty'] = 100;
答案 0 :(得分:2)
与usort
相同。这个具体问题的诀窍在于,你正在排序的东西里面有一个额外的数组级别,里面有一个你不会事先知道的字符串键。您可以使用reset
来获取它。
usort($arr['fruits'], function($a, $b) {
return reset($a)['priority'] <=> reset($b)['priority'];
});
这假设$arr['fruits']
中的每个数字键将只包含一个字符串键(水果名称)的单个数组。 IMO数字索引似乎对这些数据没用,我会使用一个结构,其中水果名称是直接在fruits
下的密钥,如
$arr['fruits'] = [
'banana' => ['color' => 'yellow', 'qty' => '50', 'priority' => 3],
'apple' => ['color' => 'red', 'qty' => '75', 'priority' => 1],
'grape' => ['color' => 'purple', 'qty' => '100', 'priority' => 5],
];
您可以使用uasort
进行排序以保留字符串键。
uasort($arr['fruits'], function($a, $b) {
return $a['priority'] <=> $b['priority'];
});
但我不知道整个画面;可能有某种原因你需要反过来。