iamdivine
@iamdivine

Как сравнить 2 массива и убрать повторяющиеся записи?

Добрый вечер. Есть 2 массива
первый брал их при выводе через print_r
11] => Array
        (
            [pname] => Andrey_Faste
            [vkID] => 2324324
        )

    [12] => Array
        (
            [pname] => Aleksey_Andreev
            [vkID] => 
        )

    [13] => Array
        (
            [pname] => Ivan_Alekseev
            [vkID] => 
        )

    [14] => Array
        (
            [pname] => Ivan_Ivanov
            [vkID] => 
        )

    [15] => Array
        (
            [pname] => Ivan_Petrov
            [vkID] => 344366423498
        )


и 2 массив
[44] => Array
        (
            [pname] => Ivan_Ivanov
        )
[33] => Array
        (
            [pname] => Ivan_Petrov
        )

Не знаю как решить проблему. Надо из первого массива вычесть второй, чтобы убрались дубли в первом
Чтобы вывод был такой
[15] => Array
        (
            [pname] => Ivan_Petrov
            [vkID] => 344366423498
        )

Голова кипит, извиняюсь за возможно не правильную терминологию.
array_unique(array_merge($array1, $array2)) пробовал, не спасает
  • Вопрос задан
  • 1112 просмотров
Решения вопроса 1
@goshaLoonny
Если вам нужно убрать из первого массива данные что есть во втором, попробуйте так:
$array1 = [
  [
    'pname' => 'Andrey_Faste',
    'vkid'  => 2324324
  ],[
    'pname' => 'Aleksey_Andreev',
    'vkid'  => null
  ],[
    'pname' => 'Ivan_Alekseev',
    'vkid'  => null
  ],[
    'pname' => 'Ivan_Ivanov',
    'vkid'  => null
  ],[
    'pname' => 'Ivan_Petrov',
    'vkid'  => 344366423498
  ]
];

$array2 = [
  [
    'pname' => 'Ivan_Ivanov',
    'vkid'  => null
  ],[
    'pname' => 'Ivan_Petrov',
    'vkid'  => null
  ]
];

// Перебирать будем первый массив, по этому создадим третий массив 
// который будет содержать все `pname` из второго массива
$array3 = [];

foreach ($array2 as $item) {
  array_push($array3, $item['pname']);
}

// Далее перебираем первый массив и проверяем есть ли совпадения 
// со вторым, если есть - удаляем
foreach ($array1 as $key=>$item) {
  if (in_array($item['pname'], $array3)) unset($array1[$key]);
}

// Вывести результат
echo "<pre>";
print_r($array1);

Результат:
Array
(
    [0] => Array
        (
            [pname] => Andrey_Faste
            [vkid] => 2324324
        )

    [1] => Array
        (
            [pname] => Aleksey_Andreev
            [vkid] => 
        )

    [2] => Array
        (
            [pname] => Ivan_Alekseev
            [vkid] => 
        )

)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@the5x
array_unique( array_merge($arr_1, $arr_2) );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы