如何使用array_diff来获取缺少的项目

时间:2014-11-02 16:40:30

标签: php arrays array-difference

我无法正确使用array_diff。 我有2个阵列:

$arr_1 = array(
        0 => array('name' => 'Day Rate 2', 'from' => 1200, 'to' => 1400),
        1 => array('name' => 'Day Rate 2', 'from' => 2000, 'to' => 2000),
    );

$arr_2 = array(
        0 => array('name' => 'Day Rate 2', 'from' => 0, 'to' => 1000),
        1 => array('name' => 'Day Rate 2', 'from' => 1200, 'to' => 1400),
        2 => array('name' => 'Day Rate 3', 'from' => 2000, 'to' => 4000),
    );

我想获取 $ arr_1 中不存在的 $ arr_2 中的值。我希望它能归还:

0 => array('name' => 'Day Rate 2', 'from' => 0, 'to' => 1000)

为了比较它们,我首先序列化了每个项目的值并创建了这两个序列化数组,我可以使用 array_diff 来比较它们。

foreach ($arr_1 as $key => $val) {
    $arr_1_simple[$key] = serialize(array($val['from'], $val['to']));
}

foreach ($arr_2 as $key => $val) {
    $arr_2_simple[$key] = serialize(array($val['from'], $val['to']));
}

Array
(
    [0] => a:2:{i:0;i:1200;i:1;i:1400;}
    [1] => a:2:{i:0;i:2000;i:1;i:2000;}
)
Array
(
    [0] => a:2:{i:0;i:0;i:1;i:1000;}
    [1] => a:2:{i:0;i:1200;i:1;i:1400;}
    [2] => a:2:{i:0;i:2000;i:1;i:4000;}
)

由于$ arr_1和$ arr_2都找到了a:2:{i:0;i:1200;i:1;i:1400;}a:2:{i:0;i:2000;i:1;i:4000;},所以奇怪的是a:2:{i:0;i:0;i:1;i:1000;},这就是我认为array_diff会返回的。

然而,我得到的结果是:

print_r(array_diff($arr_2_simple, $arr_1_simple));

Array
(
    [0] => a:2:{i:0;i:0;i:1;i:1000;}
    [2] => a:2:{i:0;i:2000;i:1;i:4000;}
)

有谁能告诉我为什么a:2:{i:0;i:2000;i:1;i:4000;}会被退回?我希望$ arr_2中的所有项目都不在$ arr_1中。我怎么得到这个?

2 个答案:

答案 0 :(得分:1)

您在数组1中的值

[1] => a:2:{i:0;i:2000;i:1;i:2000;}

与数组2中的值不匹配

[2] => a:2:{i:0;i:2000;i:1;i:4000;}

答案 1 :(得分:1)

array_diff($arr1, $arr2)Here $arr1是要比较的数组,而$arr2是要比较的数组。该函数返回一个数组,其中包含$ arr1中不存在$ arr2的所有条目。实施例

案例:1 array_diff($arr1, $arr2)

$arr1 = [1, 2, 3];
$arr2 = [1,3, 4];
print_r(array_diff($arr1, $arr2)); //Output: [2]

案例:2 array_diff($arr2, $arr1)

$arr1 = [1, 2, 3];
$arr2 = [1,3, 4];
print_r(array_diff($arr2, $arr1)); //output: [4]