PHP:如何排序多维数组值

时间:2018-04-13 22:31:19

标签: php

我正在尝试按优先级对多维数组进行排序:

$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;

1 个答案:

答案 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'];
});

但我不知道整个画面;可能有某种原因你需要反过来。

相关问题