PHP如何首先按键然后按值对关联数组进行排序?

时间:2011-03-21 12:55:54

标签: php arrays sorting key

$arr =array(
    28 => 23,
    26 => 23,
    15 => 12,
    29 => 12,
    1 => 12,
    16 => 15,
    30 => 15,
    11 => 12,
    8 => 23,
    33 => 23
);

如何排序:

8 => 23
26 => 23
28 => 23
33 => 23
16 => 15
30 => 15
1 => 12
11 => 12
15 => 12
29 => 12

3 个答案:

答案 0 :(得分:5)

使用uksort,但使数组可用于比较函数,以便按值进行二次比较。使它成为一个全局变量将是最快+最脏的方式。

答案 1 :(得分:4)

您可以使用uksort()启用自定义回调来查看键和间接查看其关联值。然后,这是一个简单的问题,即决定进行哪些比较并返回适当的大于或小于零的值来影响排序顺序。

这是一个使用临时变量周围的闭包的示例(请参阅Jacob's comment),这应该是有意义的。

$temp = $arr;
uksort($arr, function ($a,$b) use ($temp) {
    // Same values, sort by key ascending
    if ($temp[$a] === $temp[$b]) {
        return $a - $b;
    }
    // Different values, sort by value descending
    return $temp[$b] - $temp[$a];
});
unset($temp);
print_r($arr);

答案 2 :(得分:0)

很容易。首先使用ksort,然后使用asort作为新的排序数组。你会找到你的结果。