如何在PHP中交叉对象数组?

时间:2015-06-16 06:37:31

标签: php arrays algorithm object

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

例如,

$ array1 的值为

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

)

$ array2 的值为,

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

)

所以,我想进入 $ result 的是

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

)

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以使用array_uintersect function并手动定义回调比较函数来执行此操作:

$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);

答案 1 :(得分:0)

尝试使用array_intersect

  

array_intersect()返回一个数组,其中包含所有参数中存在的array1的所有值。请注意,密钥会被保留。