如何在 PHP 中对对象数组进行相交?

cse*_*t02 4 php arrays algorithm object

我如何获得 PHP 中两个对象数组之间的交集结果。

例如,

$array1的值为

Array
(
    [0] => stdClass Object
        (
            [id] => 2
            [influencer_id] => 2
            [follower_id] => 1
        )

)
Run Code Online (Sandbox Code Playgroud)

$array2的值​​为,

Array
(
    [0] => stdClass Object
        (
            [id] => 2
            [influencer_id] => 1
            [follower_id] => 2
        ),
    [1] => stdClass Object
        (
            [id] => 3
            [influencer_id] => 3
            [follower_id] => 2
        ),

)
Run Code Online (Sandbox Code Playgroud)

所以,我想在$result中得到的是

Array
(
    [0] => stdClass Object
        (
            [id] => 2
            [influencer_id] => 2
            [follower_id] => 1
        )

)
Run Code Online (Sandbox Code Playgroud)

获得它的最佳方式是什么?

提前致谢!

jmg*_*oss 5

您可以使用array_uintersect函数并手动定义回调比较函数来做到这一点:

$arr1 = json_decode('[{"id":2,"influencer_id":2,"follower_id":1}]');
$arr2 = json_decode('[{"id":2,"influencer_id":2,"follower_id":1},{"id":3,"influencer_id":3,"follower_id":2}]');

$arr3 = array_uintersect($arr1, $arr2, function ($e1, $e2) { 
    if($e1->id == $e2->id && $e1->influencer_id == $e2->influencer_id && $e1->follower_id == $e2->follower_id) {
        return 0;
    } else {
        return 1;
    }
});

var_dump($arr3);
Run Code Online (Sandbox Code Playgroud)