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)