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

Chr*_*ord 4 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'
    )
);
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 15

用途uasort():

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

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

例:

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

uasort($data, 'cmp');
Run Code Online (Sandbox Code Playgroud)

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

function cmp($a, $b) {
    return strcmp($a['attack'], $b['attack']);
} 
Run Code Online (Sandbox Code Playgroud)

更新:

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

return ($a['attack'] < $b['attack']) ? 1 : -1;
//                                     ^----^
Run Code Online (Sandbox Code Playgroud)

或者接受@ salathe的提议:

return $b['attack'] - $a['attack'];
Run Code Online (Sandbox Code Playgroud)