2

I'm having trouble using array_diff correctly. I've got 2 arrays:

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

I want to get the values in $arr_2 that are not present in $arr_1. I want it to return this:

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

To compare them, I first serialized the values of each item and created these two serialized arrays, which I can use to compare, using 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;}
)

Since a:2:{i:0;i:1200;i:1;i:1400;} and a:2:{i:0;i:2000;i:1;i:4000;} are found in both $arr_1 and $arr_2,the odd one out is a:2:{i:0;i:0;i:1;i:1000;}, which is what I thought array_diff would return.

However, the result that I'm getting is:

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

Can anyone tell me why a:2:{i:0;i:2000;i:1;i:4000;} is getting returned? I want all the items in $arr_2 that are not in $arr_1. How do I get this?

4

2 回答 2

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;}
于 2014-11-02T16:48:39.940 回答
1

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

情况1array_diff($arr1, $arr2)

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

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

$arr1 = [1, 2, 3];
$arr2 = [1, 3, 4];
print_r(array_diff($arr2, $arr1)); //output: [4]
于 2014-11-02T16:55:51.637 回答