如何按值对多维数组进行排序?

时间:2010-07-19 14:14:21

标签: php arrays sorting multidimensional-array

我有一个数组如下,我想按键“攻击”的值来命令该数组。数组(15, 13, 18)的第一个键是数据库中某个特定项的ID,因此我不希望在对数组进行排序时更改这些键。任何帮助将不胜感激。

这是数组:

$data = array(
    '15' => array(
        'attack' => '45', 'defence' => '15', 'total' => '10'
    ),
    '13' => array(
        'attack' => '25', 'defence' => '15', 'total' => '10'
    ),
    '18' => array(
        'attack' => '35', 'defence' => '15', 'total' => '10'
    )
);

3 个答案:

答案 0 :(得分:12)

使用uasort()

  

此函数使用用户定义的比较函数对数组进行排序,使数组索引与它们关联的数组元素保持相关性。

     

这主要用于排序实际元素顺序很重要的关联数组。

示例:

function cmp($a, $b) {
    if ($a['attack'] == $b['attack']) {
        return 0;
    }
    return ($a['attack'] < $b['attack']) ? -1 : 1;
} 

uasort($data, 'cmp');

如果值始终为字符串,您还可以在cmp()函数中使用strcmp()

function cmp($a, $b) {
    return strcmp($a['attack'], $b['attack']);
} 

<强>更新

要按降序排序,您只需更改返回值:

return ($a['attack'] < $b['attack']) ? 1 : -1;
//                                     ^----^

或接受@ salathe的建议:

return $b['attack'] - $a['attack'];

答案 1 :(得分:3)

只需使用array_multisort

即可
foreach ($data as $key => $row) {
    $attack[$key]  = $row['attack'];
}

// Sort the data with attack descending
array_multisort($attack, SORT_DESC, $data);

希望这有帮助。

答案 2 :(得分:0)

$result = [];
foreach ($data as $key => $value) {
    $result[$key] = $value;
    asort($result[$key]);
}
print_r($result);

希望这会有所帮助!