数学然后按字母顺序排列PHP中的二维数组

时间:2017-04-21 22:43:32

标签: php arrays sorting multidimensional-array

我真的很努力但却没能按照我想要的方式对我的二维数组进行排序。

我有一个存储姓名和年龄的数组,看起来像是:

$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 ...

2 个答案:

答案 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