我有一个键=>值数组:
a => 2
c => 1
b => 3
我试过了:
ksort($result);
arsort($result);
但是它不起作用。我试着按字母顺序a-z排序然后按0-∞升序排序
所以我应该得到
c => 1
a => 2
b => 3
尝试使用asort()
代替arsort()
。arsort()
将对数组进行反向排序。像这样的代码应该"work":
$test = array(
'a' => 0,
'b' => 1,
'c' => 2
);
ksort($test);
asort($test);
马里奥是正确的,如果多个项目包含相同的值,这将不起作用。或者,您可以使用uksort(),它允许您精确定义数组的排序方式。例如,您可以使用默认值对两个项进行排序。但是如果两个值按键排序相同
$test = array(
'a' => 2,
'd' => 1,
'c' => 1,
'b' => 3
);
function cmp($a, $b){
global $test;
$val_a = $test[$a];
$val_b = $test[$b];
if($val_a == $val_b){
return ($a < $b) ? -1 : 1;
}
return ($val_a < $val_b) ? -1 : 1;
}
uksort($test, 'cmp');
我得到了意想不到的结果,因为排序值具有相同的值是不稳定的。
那么你在问题中忘记提到的是值可以出现两次,并且你希望数组按值和键排序。
c => 1
a => 2
z => 2
b => 3
在PHP中没有这个函数。不过,您可以尝试先按键ksort()
排序,然后应用用户定义的函数按值uasort()
排序。在回调中,实现$a == $b
检查并返回0也很重要。因此,前面的键排序可能不会被+1或-1比较状态意外地改变。(不知道这是否真的有效。)
否则,您将不得不自己实现整个排序算法,可能会在不同的映射中分离键和值。