按多个条件对数组进行排序


Sort an array by more than one criteria

我有两个数组:

1-ID人(键)和资格(值),此数组按降序排列:arsort

   Array
    (
        [61] => 02.30.00
        [95] => 02.30.00
        [19] => 02.01.00
        [131] => 02.00.00
        [58] => 01.60.00
        [97] => 01.50.00
        [76] => 01.40.00
        [20] => 01.30.00
        [112] => 01.10.00
        [42] => 01.10.00            
        [116] => 01.04.00
    }

阿拉伯数字-。。。以及与 ID 人员关联的尝试。

Array
(
    [131] => 1
    [58] => 1
    [61] => 1
    [112] => 2
    [116] => 1
    [42] => 1
    [19] => 1
    [20] => 1
    [76] => 1
    [97] => 1
    [95] => 1
)

我需要保持降序,但按尝试次数添加升序。我的问题是这些值:

[112] => 01.10.00 | 2
[42]  => 01.10.00 | 1

如何获得此结果?

Array
(
    [61] => 02.30.00 // 1
    [95] => 02.30.00 // 1
    [19] => 02.01.00 // 1
    [131] => 02.00.00 // 1
    [58] => 01.60.00 // 1
    [97] => 01.50.00 // 1
    [76] => 01.40.00 // 1
    [20] => 01.30.00 // 1
    [42] => 01.10.00 // 1
    [112] => 01.10.00 // 2
    [116] => 01.04.00 // 1
)

编辑:丑陋的解决方案:

    $new = array();
    foreach($qualification as $k => $r)
    {
        $new[$k] = array(
            'qualification'=> $r,
            'attempt'      => $attempt[$k],
            'id'           => $k,       
        );
    }
    foreach ($new as $key => $row)
    {
        $qlf[$key]      = $row['qualification'];
        $att[$key]      = $row['attempt'];
    }
    array_multisort($qlf, SORT_DESC, $att, SORT_ASC, $new);
    $result = array();
    foreach ($new as $row)
    {
        $result[$row['id']] = $row['qualification'];
    }
print_r($result);
uksort($qualification, function ($a, $b) use ($qualification, $attempt) {
    return strcmp($qualification[$a], $qualification[$b])
        ?: $attempt[$a] - $attempt[$b];
});

我不完全确定您要按哪个顺序对内容进行排序,但上面的代码就可以了; 您可能只需要切换$a$b来反转一个或另一个的顺序。