Найти разницу в массивах на основе значений php - PullRequest
0 голосов
/ 15 января 2020

У меня есть 2 массива -

Array
(
    [0] => Array
        (
            [description] => 5390BF675E1464F32202B
            [to_email] => test@test.com
        )

    [1] => Array
        (
            [description] => 5390BF675E1464F32202B
            [to_email] => test3@test.com
        )

    [2] => Array
        (
            [description] => 5390BF675E1464F32202B
            [to_email] => testagain@gmail.com
        )

)

Array
(
    [0] => Array
        (
            [to_email] => test@test.com
        )

    [1] => Array
        (
            [to_email] => test3@test.com
        )

)

Я хочу получить значения из массива 1, которые отличаются от второго массива.

Я пытался использовать -

$result = array_diff_assoc($array1, $array2);

AND

$result = array_diff($array1, $array2);

Но оба дали ошибку вроде -

Примечание: преобразование массива в строку в

Результат, который я ожидаю

1019 *

1 Ответ

2 голосов
/ 15 января 2020

Вы можете создать список адресов электронной почты для исключения, используя array_column. Мы используем форму с тремя параметрами для индексации этого массива по адресам электронной почты, поскольку это облегчает фильтрацию с помощью:

$exclude_ids = array_column($array2, 'to_email', 'to_email');

Затем мы можем использовать array_filter для фильтрации $array1 :

$output = array_filter($array1, function ($v) use ($exclude_ids) {
    return !isset($exclude_ids[$v['to_email']]);
});
print_r($output);

Вывод:

Array
(
    [2] => Array
        (
            [description] => 5390BF675E1464F32202B
            [to_email] => testagain@gmail.com
        )    
)

Демонстрация на 3v4l.org

Обратите внимание, если вы хотите, чтобы выходной массив был переиндексирован до 0 , просто используйте

$output = array_values($output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...