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