array_udiff неожиданный результат

Vano

Новичок
Привет там!

Обьясните плз в чем прикол:
PHP:
$array1 = [1, 2, 3];

$arrayToDelete = [2];

function myFunc($a, $b) {
    echo $a, ' - ', $b, "\n";
    return ($a == $b) ? 0 : 1;
}

$array = array_udiff($array1, $arrayToDelete, 'myFunc');

print_r($array);
Почему если в $arrayTodelete, будут значения 1 или 2, то удаление с массива не сработает?
PHP:
$arrayToDelete = [1];
 

флоппик

promotor fidei
Команда форума
Партнер клуба
The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.
 

Vano

Новичок
А еще интересно - зачем она два раза проходит по матрице массивов. Так что сночала в $a все значения первого массива а потом второго. Функция какая-то для сверхразумов)
 

fixxxer

К.О.
Партнер клуба
А в php5.6 работает и без -1
Видимо, тебе повезло случайно, ну или алгоритм такой был. Поменяли алгоритм и перестало.

А так - garbage in, garbage out. Заложился на недокументированную особенность реализации - ССЗБ.
 

fixxxer

К.О.
Партнер клуба
Ну а на что тут кидать-то? Там, где должно быть 0, 1 или -1, у него 0, 1 или 1.

Возможно, раньше было достаточно неравенства значений, а теперь там внутри сортировка.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Ну а на что тут кидать-то? Там, где должно быть 0, 1 или -1, у него 0, 1 или 1.

Возможно, раньше было достаточно неравенства значений, а теперь там внутри сортировка.
учитывая, что там есть коммент 10 летней давности о отрицательных значениях, думаю, оно на самом деле работало так всегда.
 
Сверху