PHP排序关联多维数组


php sort associative multidimensional array

我有一个包含子数组的大数组。

方案如下:

$bigArray['apple'][]  = array('shop1', 'Fruit', '7');
$bigArray['apple'][]  = array('shop2', 'Fruit', '5');
$bigArray['pear'][]   = array('shop2', 'Fruit', '3.5');
$bigArray['banana'][] = array('shop1', 'Fruit', '2');

在这种情况下$bigArray['apple']包含2个数组

首先,我想从第三个参数(price)开始对数组进行排序按升序排列(从最低价到最高价)所以当打印出来的时候将显示:

'shop2', 'Fruit', '5' ->lowest price
'shop1', 'Fruit', '7'

第二件事是,我想对整个数组$bigArray按升序排序(从最低价到最高价);现在,由于数组像$bigArray['apple']已经排序,在$bigArray排序只有$bigArray['apple'][0]第一个数组因为[0]将是这类产品的最低价子数组,已经排序。所以在最后打印的时候$bigArray会显示:

'shop1', 'Fruit', '2'
'shop2', 'Fruit', '3.5'
'shop2', 'Fruit', '5'
....

我一直在与体育斗争,但对我来说要复杂得多使用多维关联数组

谢谢。

我认为这就是你想要达到的目标的解决方案:

<?php
$bigArray['apple'][]  = array('shop1', 'Fruit', '7');
$bigArray['apple'][]  = array('shop2', 'Fruit', '5');
$bigArray['pear'][]   = array('shop2', 'Fruit', '3.5');
$bigArray['banana'][] = array('shop1', 'Fruit', '2');

foreach ($bigArray as &$item)  {
    uasort($item, function($a, $b) {        
        if ($a[2] == $b[2]) {
            return 0;
        }    
        return ($a[2] < $b[2]) ? -1 : 1;    
    });
}
uasort($bigArray, function($a, $b) { 
    if ($a[0][2] == $b[0][2]) {
        return 0;
    }    
    return ($a[0][2] < $b[0][2]) ? -1 : 1;    
});
foreach ($bigArray as $k => $v) {
    foreach ($v as $item)
    {
        echo $k.': '.$item[0].' '.$item[1].' '.$item[2]."<br />";            
    }
}