首页 > 解决方案 > 如何检查数组的元素是否存在于另一个数组数组中

问题描述

$result = array();
    $A= Array
   (
    [0] => Array
       (
        [id] => 1946
        [name] => cook
        [pic] => cookpic.png
       )

)
$B =  Array
 (
   [0] => Array
    (
        [id] => 1944
        [name] => driver
        [pic] => driver.png

    )

  [1] => Array
    (
        [id] => 934
        [name] => developer
        [pic] => developer.jpg
    )

[2] => Array
    (
        [id] => 1946
        [name] => cook
        [pic] => cookpic.png

    )

 )

我试过的:

   $result = !empty(array_intersect($a, $b));

我有两个数组,我用来var_dump展示它们并且可以在上面看到它们。

我想要实现的是,我想比较两个职业并想要$result独一无二的数组。现在,如果 Cook 不存在于 $B 中,那么 Cook 应该被推送到$B数组中,这将变成$resultelse 它不应该被推送。

标签: phparraysmultidimensional-arrayphp-7

解决方案


$result = !empty(array_intersect($a, $b));只会告诉你$a和之间是否有共同的元素$b

$result = array();
$a = array(
    array(
        "id" => 1946,
        "name" => "Cook", // upper case C
        "pic" => "cookpic.png"
    ),

    array(
        "id" => 1946,
        "name" => "cook", // lower case c
        "pic" => "cookpic.png"
    )
);

$b = array(
    array(
        "id" => 1944,
        "name" => "driver",
        "pic" => "driver.png"
    ),
    array(
        "id" => 934,
        "name" => "developer",
        "pic" => "developer.png"
    ),
    array(
        "id" => 1946,
        "name" => "cook", // lower case c
        "pic" => "cookpic.png"
    )
);

foreach ($a as $k => $v) {
    if (in_array($v, $b) == false) {
        array_push($result, $v);
    }
}

print_r($result);

您可以使用array_diff但它不适用于多维数组。所以你必须从头开始

编辑:

$result = array();
$a = array(
    array(
        "id" => 1946,
        "name" => "Cook", // upper case C
        "pic" => "cookpic.png"
    ),

    array(
        "id" => 1946,
        "name" => "cook", // lower case c
        "pic" => "cookpic.png"
    )
);

$b = array(
    array(
        "id" => 1944,
        "name" => "driver",
        "pic" => "driver.png"
    ),
    array(
        "id" => 934,
        "name" => "developer",
        "pic" => "developer.png"
    ),
    array(
        "id" => 1946,
        "name" => "cook", // lower case c
        "pic" => "cookpic.png"
    )
);

$m = array_merge($a, $b);
$result = array_map("unserialize", array_unique(array_map("serialize", $m)));
print_r($result);

合并两个数组,然后使用 array_map 应用 array_unique 删除重复项


推荐阅读