【问题标题】:How to use array_diff to get the missing item如何使用 array_diff 获取丢失的项目
【发布时间】:2014-11-02 16:40:30
【问题描述】:

我在正确使用 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_2 中不存在于 $arr_1 中的值。我希望它返回这个:

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

因为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_2 中所有不在 $arr_1 中的项目。我怎么得到这个?

【问题讨论】:

  • 改用print_r(array_diff($arr_1_simple, $arr_2_simple));
  • 您将获得 $arr_2 中所有不在 $arr_1 中的项目。记录 0 和记录 2 都不在数组 1 中。
  • 谢谢。直到现在才注意到。

标签: php arrays array-difference


【解决方案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;}

【讨论】:

  • 啊,我刚才也看到了。谢谢。
【解决方案2】:

array_diff($arr1, $arr2)Here $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]

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    相关资源
    最近更新 更多