Как узнать разницу между двумя массивами объектов - PullRequest
0 голосов
/ 09 июля 2020

У меня есть 2 массива объектов, например

$arr1 = [
  (new MyClass())->setId(1),
  (new MyClass())->setId(2),
  (new MyClass())->setId(3),
];

$arr2 = [
  (new MyClass())->setId(1),
  (new MyClass())->setId(2),
];

Мне нужно найти разницу между этими двумя массивами, в этом примере мне нужно получить массив с одним элементом, тот, у которого id == 3.

Я знаю, что должен использовать array_udiff (возможно), но я не мог понять, как.

1 Ответ

1 голос
/ 09 июля 2020

Следующий лог c может помочь:

<?php
class MyClass
{
    public $id = null;

    public function setId($id) {
        $this->id = $id;
        return $this;
    }
}

$arr1 = [
    (new MyClass())->setId(1),
    (new MyClass())->setId(2),
    (new MyClass())->setId(3),
];

$arr2 = [
    (new MyClass())->setId(1),
    (new MyClass())->setId(2),
];

$difference = array_udiff($arr1, $arr2,
    function ($objOne, $objTwo) {
        return $objOne->id - $objTwo->id;
    }
);

Вывод:

Array
(
    [2] => MyClass Object
        (
            [id] => 3
        )

)

рабочий демонстрационный

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