В PHP 7 usort добавляет равные элементы в конец массива, а в PHP 5 - в начало.
Кажется, есть недокументированное изменение в том, как PHP 7 обрабатывает равные результаты в функциях usort.
$myArray = array(1, 2, 3);
usort($myArray, function($a, $b) { return 0; });
print_r($myArray);
// PHP 5:
Array
(
[0] => 3
[1] => 2
[2] => 1
)
// PHP 7
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Другими словами, в PHP 7 usort добавляет равные значения в конец массива, тогда как PHP 5 добавляет их в начало. Я не могу найти никаких упоминаний об этом поведении.
Есть ли способ заставить поведение PHP 5?
1 ответ
Решение
Из документов PHP:
Если два члена сравниваются как равные, их относительный порядок в отсортированном массиве не определен.
Полагаться на неопределенное поведение - плохая идея. Нет способа изменить поведение (кроме того, что предметы не равны).