PHP - 对多维数组进行排序

时间:2011-12-17 16:01:37

标签: php arrays sorting

Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [name] => Nicki Escudero
                    [id] => 27700035
                )

            [1] => Array
                (
                    [name] => Yorgo Nestoridis
                    [id] => 504571368
                )
         )
)

如何使用其名称对此多维数组进行排序?

我尝试使用array_multisort,但它无效。

3 个答案:

答案 0 :(得分:0)

已经排序了:-)你想要排序的是什么?数据来自哪里?如果你从数据库中获取它,你应该有不同的排序。

答案 1 :(得分:0)

如果这些是您拥有的唯一两个值,您可以尝试使id数组的索引,名称可以是值。然后,您可以使用asort按名称对数组进行排序,并保持索引值关系。

通过制作id索引,我的意思是$array[27700035]会返回Nicki Escudero

// Copy the array to a new array.
foreach($array as $val) {
    $newArray[$val['id']] = $val['name'];
}

asort($newArray);

编辑:我已阅读了手册,您还可以将usort与自定义比较功能结合使用。虽然我从来没有使用过这个并且可以提供很少的帮助...... PHP usort

答案 2 :(得分:0)

如果您想使用array_multisort,请使用以下内容:

$array = array(
    'data' => array(
        array(
            'name' => 'Yorgo Nestoridis',
            'id'   => 504571368,
        ),  
        array(
            'name' => 'Nicki Escudero',
            'id'   => 27700035,
        ),  
    ),  
);  

$names = array();
foreach($array['data'] as $datum) {
    $names[] = $datum['name'];
}   

array_multisort($names, SORT_ASC, $array['data']);
var_dump($array); // now sorted by name

另一种选择是使用自定义比较功能:

function compareNames($a, $b) {
    return strcmp($a['name'], $b['name']);
}   

usort($array['data'], 'compareNames');
相关问题