Как проверить, присутствует ли элемент массива или нет в других массивах массива - PullRequest
0 голосов
/ 28 ноября 2018
$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, иначе он не должен быть выдвинут.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Используйте 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);
0 голосов
/ 28 ноября 2018

делает $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_unique, используя array_map для удаления дубликатов

...