我真的很努力但却没能按照我想要的方式对我的二维数组进行排序。
我有一个存储姓名和年龄的数组,看起来像是:
$array[0][0]="Alex"
$array[0][1]=38
$array[1][0]="Peggy"
$array[1][1]=37
$array[2][0]="Ben"
$array[2][1]=38
依旧......
我设法按年龄对这个数组进行排序:
usort($DATA, function($a, $b) {
return $b[1] - $a[1];
});
但是我想通过做和字母排序的年龄相同的人来添加另一层排序。首先,数组按年龄排序,然后如果某些年龄相同,则按字母顺序排序,首先是alex,然后是Ben ...
答案 0 :(得分:1)
根据usort()
documentation,"如果第一个参数被认为分别小于,等于或大于,则比较函数必须返回小于,等于或大于零的整数而不是第二个。"因此,不要只是立即返回,检查差异是否为零,并采取相应的行动:
<?php
$array = [["Alex",38], ["Peggy",37], ["Ben",38]];
usort($array, function($a, $b) {
$diff = $b[1] - $a[1];
if ($diff === 0) {
$diff = strcmp($a[0], $b[0]);
}
return $diff;
});
print_r($array);
这里我们使用strcmp()
function,&#34;返回&lt;如果str1小于str2,则为0; &GT;如果str1大于str2,则为0;如果str1大于str2,则为0;就像我们需要的那样。
输出:
Array
(
[0] => Array
(
[0] => Alex
[1] => 38
)
[1] => Array
(
[0] => Ben
[1] => 38
)
[2] => Array
(
[0] => Peggy
[1] => 37
)
)
答案 1 :(得分:1)
您可以使用array_multisort
并按列排序(使用array_column
提取它们):
array_multisort(array_column($array, 1), array_column($array, 0), $array);
这是working demo。