Php数组排序


Php Sorting arrays

我有一个键=>值数组:

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比较状态意外地改变。(不知道这是否真的有效。)

否则,您将不得不自己实现整个排序算法,可能会在不同的映射中分离键和值。