2

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を使用して比較に使用できるこれら 2 つのシリアル化された配列を作成しました。

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

a:2:{i:0;i:1200;i:1;i:1400;}a:2:{i:0;i:2000;i:1;i:4000;}は $arr_1 と $arr_2 の両方にあるため、奇妙なのは です。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_1 にない $arr_2 のすべてのアイテムが必要です。どうすれば入手できますか?

4

2 に答える 2