簡體   English   中英

PHP:如何對多維數組值進行排序

[英]PHP: How to sort multidimentional array values

我試圖按優先級對多維數組排序:

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

與通常一樣,使用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'];
});

但是我不了解整個情況。 可能由於某些原因您需要以其他方式使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM