从2个不同的数组中删除相似的值后获取结果数组

时间:2016-12-26 07:22:05

标签: php arrays object multidimensional-array

有两组代码,每组代码有两个不同的数组

首先是这个

$this->db->select('id');
$query = $this->db->get('user');
echo "<pre>";
print_r( $query->result());
echo "</pre>";

并给出以下结果

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

    [1] => stdClass Object
        (
            [id] => 2
        )

)

第二个就是这个

$this->db->select('user_id');
$query_two = $this->db->get('request_user');
echo "<pre>";
print_r( $query_two->result());
echo "</pre>";

并给出以下结果

Array
(
    [0] => stdClass Object
        (
            [user_id] => 1
        )

)

我希望得到不应该具有重复值的最终数组,例如在上面的2个数组中,1在数组中都是常见的,所以它不应该存在,在结果数组中我应该只得到值2

1 个答案:

答案 0 :(得分:0)

您可以采取以下方法。从第二个数组中列出id列表。然后使用该列表过滤第一个。如果id不在该列表中:保留它。

<?php

$one = [
    (object) ['id' => 1],
    (object) ['id' => 2],
];
$two = [
    (object) ['id' => 1],
];

$ids_in_two = [];
foreach($two as $val) {
    $ids_in_two[] = $val->id;
} 

$filtered = array_filter($one, function($val) use ($ids_in_two) {
    return !in_array($val->id, $ids_in_two);
});

var_dump($filtered);

输出:

array(1) {
  [0]=>
  object(stdClass)#1 (1) {
    ["id"]=>
    int(2)
  }
}