@ermolaev_nikita

Баг ли это в uasort / usort?

Наткнулся на интересное поведение в PHP 8 с функцией uasort / usort

Имеется следующий код:
<?php
$ar = [
    [393, 464],
    [-59, 180],
    [-342, 402],
    [-90, 135],
    [-302, 207],
];
uasort($ar, static fn($a, $b) : int => $a[0] > $b[0]);
var_dump($ar);


Результат следующий:
[-59, 180],
[-342, 402],
[-302, 207],
[-90, 135],
[393, 464],

Если включить версию 7.4 , то сортировка проходит верно. Это поведение можно пронаблюдать и на https://sandbox.onlinephpfunctions.com/ вставьте код и переключите версии.

Что скажите?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
У вас неверно формируется значение пользовательской функции для сортировки.
Она должна выдавать значение, меньшее нуля, если $a < $b, ноль, если $a == $b, большее нуля, если $a > $b.
У вас же она выдаёт 0 и для $a < $b и для $a == $b.
uasort($ar, static fn($a, $b) : int => $a[0] - $b[0]);

А то, что в разных версиях разный результат, может быть просто потому, что немного поменяли внутренний алгоритм usort/uasort.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы