【问题标题】:How to check a element of array is present or not in another arrays of array如何检查数组的元素是否存在于另一个数组数组中
【发布时间】:2018-11-28 13:12:11
【问题描述】:
$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 数组中,这将变成 $result 否则它不应该被推送。

【问题讨论】:

  • 你能告诉我们你的尝试吗?
  • 我曾尝试像result = !empty(array_intersect($a, $b)); 一样使用array_intersect,但它不起作用,因为array 中有数组。有什么建议吗? @Sfili_81
  • 请更新您的问题,以便每个人都可以查看您的尝试和结果,以便我们为您提供帮助

标签: php arrays multidimensional-array php-7


【解决方案1】:

执行$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 删除重复项

【讨论】:

  • 谢谢。对不起,que有一些变化。唯一的区别是你的$result 只给我那个不唯一的数组,但是我想要在$result 中的是数组应该包含来自$a 和$b 的唯一数组。就像我搜索“cook”一样,我的结果数组应该包含 $b 的所有元素,只有一次 $a 的厨师
【解决方案2】:

使用strcasecmp()内置函数进行比较。然后使用array_push()。 您可以使用蛮力方法。但我相信你可以从中得到更好的答案。

$result=array();
$A[0]=array("id" => 1946, "name" => Cook, "pic" => cookpic.png);
$B[0]=array("id" => 1944, "name" => driver, "pic" => driver.png);
$B[1]=array("id" => 934, "name" => developer, "pic" => developer.jpg);
$B[2]=array("id" => 1946, "name" => cook, "pic" => cookpic.png);


foreach ($A as $key => $value) 
{
    foreach ($B as $key1 => $value1) 
    {
        if (!strcasecmp($value["name"], $value1["name"])) 
        {   array_push($result, $value);    }
    }
}

echo("<pre>");print_r($result);

【讨论】:

    猜你喜欢
    • 2016-04-22
    • 2016-07-27
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多