PHP asort 用于按值 ASC 对数组项进行排序?

PHP asort for sorting array items by values ASC?

asort 很奇怪,我想按值对数组中的项目进行排序,

$items = Array ( "1" => 10 , "11" => 10, "22" => 10 );

// Sort an array and maintain index association.
asort($items);

var_dump($items);

因此,由于所有值都是 相同的,因此 asort 不应该 做任何事情(我假设),但是我得到的结果,

array (size=3)
  22 => string '10' (length=2)
  11 => string '10' (length=2)
  1 => string '10' (length=2)

颠倒了顺序!?为什么?

我想要的(我觉得应该是这样的),

array (size=3)
  1 => string '10' (length=2)
  11 => string '10' (length=2)
  22 => string '10' (length=2)

有什么想法吗?

编辑:

我在下面尝试过,

// Comparison function
private function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

...

// Sort an array and maintain index association.
uasort($items, array($this, "cmp"));

但我仍然得到 相同的 'error' 结果....

自版本4.1.0 PHP sort is not stable由于排序算法,无法兼顾value和key。在相等值的情况下,您必须使用自己的比较实现来考虑键。例如,您可以将原始数组值修改为(键,值)对,对数组进行排序并将其转换为一维返回。

$items = ["1" => 10, "11" => 10, "22" => 10];

$callback = function ($a, $b) use ($callback) {
    $result = $a['value'] - $b['value'];

    if ($result == 0) {
        $result = $a['key'] - $b['key'];
    }

    return $result;
};

array_walk($items, function (&$value, $key) {
    $value = ["key" => $key, "value" => $value];
});

usort($items, $callback);

$items = array_combine(array_column($items, 'key'), array_column($items, 'value'));

print_r($items);