如何获得两个对象数组之间的差异

时间:2020-07-09 13:24:22

标签: php

例如,我有2个对象数组

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

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

我需要找到这2个数组之间的差异,在这个示例中,我需要获得一个包含单个元素的数组,其中一个元素的ID == 3。

我知道我应该使用array_udiff(也许),但是我不知道怎么做。

1 个答案:

答案 0 :(得分:1)

以下逻辑可能会有所帮助:

<?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
        )

)

工作demo