PHP 获取两个对象数组的差异

2022-08-30 12:34:50

我知道有和比较两个数组之间的差异,但是我该如何用两个对象数组来做到这一点?array_diffarray_udiff

array(4) {
    [0]=>
        object(stdClass)#32 (9) {
            ["id"]=>
            string(3) "205"
            ["day_id"]=>
            string(2) "12"
        }
}

我的数组就像这个一样,我有兴趣看到基于ID的两个数组的差异。


答案 1

这正是array_udiff的目的。编写一个函数,以您想要的方式比较两个对象,然后告诉使用该函数。像这样:array_udiff

function compare_objects($obj_a, $obj_b) {
  return $obj_a->id - $obj_b->id;
}

$diff = array_udiff($first_array, $second_array, 'compare_objects');

或者,如果您使用的是 PHP >= 5.3,则可以只使用匿名函数,而不是声明函数:

$diff = array_udiff($first_array, $second_array,
  function ($obj_a, $obj_b) {
    return $obj_a->id - $obj_b->id;
  }
);

答案 2

这是另一个选项,如果要根据对象实例运行 diff。您可以使用它作为对以下各项的回调:array_udiff

function compare_objects($a, $b) {
    return strcmp(spl_object_hash($a), spl_object_hash($b));
}

只有当你确定数组都只包含对象时,你才会想使用它 - 这是我的个人用例