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

  • Автор темы Автор темы Vano
  • Дата начала Дата начала

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];
 
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.
 
А еще интересно - зачем она два раза проходит по матрице массивов. Так что сночала в $a все значения первого массива а потом второго. Функция какая-то для сверхразумов)
 
А в php5.6 работает и без -1
Видимо, тебе повезло случайно, ну или алгоритм такой был. Поменяли алгоритм и перестало.

А так - garbage in, garbage out. Заложился на недокументированную особенность реализации - ССЗБ.
 
Ну а на что тут кидать-то? Там, где должно быть 0, 1 или -1, у него 0, 1 или 1.

Возможно, раньше было достаточно неравенства значений, а теперь там внутри сортировка.
 
Ну а на что тут кидать-то? Там, где должно быть 0, 1 или -1, у него 0, 1 или 1.

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