В 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:

Если два члена сравниваются как равные, их относительный порядок в отсортированном массиве не определен.

Полагаться на неопределенное поведение - плохая идея. Нет способа изменить поведение (кроме того, что предметы не равны).

Другие вопросы по тегам