我有一个数组如下,我想按键“攻击”的值来命令该数组。数组(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'
)
);
答案 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);
希望这会有所帮助!