Почему array_diff() не работает сразу с массивом перечислений, а in_array() или array_udiff() работает?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Почему array_diff() не работает сразу с массивом перечислений, а in_array() или array_udiff() работает?

Сообщение Anonymous »

Использование PHP 8.4 с учетом следующих функций:

Код: Выделить всё

function test_array_diff($all, $filtered)
{
return array_diff($all, $filtered);
}

Код: Выделить всё

function test_array_udiff($all, $filtered)
{
return array_udiff($all, $filtered, fn($item1, $item2) => $item1 != $item2);
}

Код: Выделить всё

function test_in_array($all, $filtered)
{
$diff = [];

foreach ($all as $case) {
if (!in_array($case, $filtered, true)) {
$diff[] = $case;
}
}

return $diff;
}
Следующее перечисление:

Код: Выделить всё

enum MyEnum
{
case FOO;
case BAR;
}
И эти переменные:

Код: Выделить всё

$all = MyEnum::cases();
$filtered = [MyEnum::BAR];
Почему последующие вызовы работают должным образом:

Код: Выделить всё

var_dump(test_array_udiff($all, $filtered));
var_dump(test_in_array($all, $filtered));
Но этот выдает:

Код: Выделить всё

var_dump(test_array_diff($all, $filtered));
Неустранимая ошибка: неперехваченная ошибка: объект класса MyEnum не удалось преобразовать в строку

Разве array_diff() не должен иметь возможности работать «из коробки» с массивами перечислений так же, как in_array() или array_udiff()?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ereas-in-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»