PHP asort для сортировки элементов массива по значениям 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"));

Но я все еще получаю тот же самый результат «ошибка» ….

0

Решение

Начиная с версии 4.1.0 PHP сортировать не стабильно из-за алгоритма сортировки, который не может учитывать как значение, так и ключ. Вы должны использовать свою собственную реализацию сравнения с учетом ключа в случае равных значений. Например, вы можете изменить исходные значения массива в пары (ключ, значение), отсортировать массив и преобразовать его в одномерный задник.

$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);
1

Другие решения

Других решений пока нет …