Сортирующий массив, содержащий ключ как числового, так и строкового типа

#php #arrays #sorting

#php #массивы #сортировка

Вопрос:

Я нахожусь в странной ситуации. Не уверен, почему я получаю этот результат. У меня есть массив $x = array(
1603 => 1976.8,
1602 => 1976.8,
1604 => 1976.8,
1605 => 1933.8,
1606 => 1667.6,
1610 => 6535.3333333333,
'1610-5' => 0.5,
1611 => 18814.5
);
если я использую ksort для этого массива, результат будет: Array
(
[1602] => 1976.8
[1603] => 1976.8
[1604] => 1976.8
[1605] => 1933.8
[1606] => 1667.6
[1610-5] => 0.5
[1610] => 6535.33333333
[1611] => 18814.5
)

Но если я удалю некоторые начальные элементы из этого массива, например

 $x = array(
1604 => 1976.8,
1605 => 1933.8,
1606 => 1667.6,
1610 => 6535.3333333333,
'1610-5' => 0.5,
1611 => 18814.5
  

);

тогда результат ksort для того же массива будет :

 Array(
[1604] => 1976.8
[1605] => 1933.8
[1606] => 1667.6
[1610] => 6535.33333333
[1610-5] => 0.5
[1611] => 18814.5)
  

Разница в обоих случаях заключается в следующем: в первом результате пара значений ключа массива (‘1610-5’ => 0.5) находится перед (1610 => 6535.3333333333), но в следующем результате для той же пары значений ключа массива: (‘1610-5’ => 0.5) находится после (1610 => 6535.3333333333). Одна и та же сортировка дает мне разные результаты. Почему это происходит? Я хочу, чтобы этот ключ ‘1610-5’ всегда шел перед ключом 1610. Который правильно отображается в моем первом результате сортировки. Пожалуйста, поправьте меня, если я где-то ошибаюсь.