Удалить все повторяющиеся ключи и значения из MultiArray

Я хочу полностью удалить дубликаты (НЕ УДАЛЕНИЕ ДУБЛИКАТОВ И ПОЛУЧЕНИЕ УНИКАЛЬНОГО АНАЛИЗА УДАЛЕНИЕ ИХ ВСЕХ) из двух массивов. Я пробовал использовать значения array_merge, array_filter, array_unique и unseting. All просто удаляет дубликаты, но не удаляет все повторяющиеся ключи и значения.

Вход:

// ARRAY 1
array(
[0] => Array ( 
    [user] => user1 
    [sending_time] => 1536513874 
    [read_time] => 1536567672 
    [content] => def 
    [recipient_status] => read 
)
);

// ARRAY 2
Array ( 
[0] => Array ( 
    [user] => 2224  
    [sending_time] => 1536513903 
    [read_time] => 1536513941 
    [content] => sad 
    [recipient_status] => read 
) 
[1] => Array ( 
    [user] => 3310  
    [sending_time] => 1536513903
    [read_time] => 1536513941 
    [content] => sad 
    [recipient_status] => read 
)
[2] => Array ( 
    [user] => user1 
    [sending_time] => 1536513874 
    [read_time] => 1536567672 
    [content] => def 
    [recipient_status] => read 
)

)

ЧТО Я ПРОВЕРИЛ?

array_merge($array2, $array1);

После использования array_merge, используя: array_unique($array, SORT_REGULAR);

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:

Как и в двух вышеупомянутых массивах, подмассив с ключом [user], имеющим значение user1, аналогичен. Я хочу удалить оба из них, поэтому результат должен быть:

array (
    [0] => 
    array (
      [user] => 2023,
      [sending_time] => 1536513903,
      [read_time] => 1536513941,
      [content] => sad,
      [recipient_status] => read,
    )
    [1] => 
    array (
      [user] => 3310,
      [sending_time] => 1536513903,
      [read_time] => 1536513941,
      [content] => sad,
      [recipient_status] => read,
    )
)

Возможно, вы захотите задать более простой вопрос, который позволит легко увидеть, в чем проблема с дубликатами в ваших данных.

Tim Biegeleisen 26.11.2018 08:14

@TimBiegeleisen Обновлено!

MR_AMDEV 26.11.2018 08:15

Я бы посоветовал включить предупреждения. Приведенный выше код порождает около 50 из них. Все, что похоже на [user], является незаконным индексом. Обычно user не определен и преобразуется в 'user', а ['user'] производит недопустимое смещение.

Eugene Anisiutkin 26.11.2018 08:24

Я попытался преобразовать его из кодировки json

MR_AMDEV 26.11.2018 08:26

@MR_AMDEV, Php имеет хотя бы одну функцию для декодирования JSON - json_decode()

Eugene Anisiutkin 26.11.2018 08:27

@EugeneAnisiutkin ок, я просто пытался показать через print_r php

MR_AMDEV 26.11.2018 08:29

@MR_AMDEV, Coudl вы, может быть, код сами предоставите? Всем было бы легче найти проблему. Вывод Print_r не очень подходит для создания проверяемого кода.

Eugene Anisiutkin 26.11.2018 08:33

Позвольте нам продолжить обсуждение в чате.

Eugene Anisiutkin 26.11.2018 08:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
74
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете попытаться перебрать массивы и добавить только недубликаты в другой массив и вернуть этот массив.

Может быть, пример? Во всяком случае, есть функция array_unique(). В большинстве случаев это должно помочь.

Eugene Anisiutkin 26.11.2018 08:35

@EugeneAnisiutkin array_unique не удаляет все совпадающие / похожие, но удаляет дубликаты и возвращает один из них, который является последним в индексе. Но я просто хочу удалить все дубликаты и не хочу получать один из них.

MR_AMDEV 26.11.2018 08:38
Ответ принят как подходящий

Вы можете использовать комбинацию массив-фильтр, поиск по массиву и столбец-массив:

Рассмотрите возможность использования следующего:

// creating example arrays
$arr1 = array(array("user" => "user1", "content" => "def"));
$a = array("user" => 2224, "content" => "aaa");
$b = array("user" => 3310, "content" => "bbb");
$c = array("user" => "user1", "content" => "ccc");
$arr2 = array($a, $b, $c);

// filter $arr2 as element that are not exist in $arr1
$arr = array_filter($arr2, function($elem) use ($arr1) {
        return (array_search($elem["user"], array_column($arr1, 'user')) === false);
});

Это вернет в $arr только два элемента в $arr2.

Не могли бы вы подтвердить? На моей стороне это тоже дает те же результаты: $MSGS_array = array_diff_key($array2, $array1);

MR_AMDEV 26.11.2018 09:00

Просто оставил свой компьютер - проверю, когда вернусь

dWinder 26.11.2018 09:02

Работает на моих примерах как шарм. Также кажется намного лучше, чем array_diff_key, потому что array_diff_key не подходит для многомерных массивов.

Eugene Anisiutkin 26.11.2018 09:08

@MR_AMDEV Я пробовал, что array_diff_key не работает - он сравнивает ключ (целое число в вашем случае), поэтому мой тестовый пример не выполняется, потому что user1 находился под ключом 0 в первом массиве, но ключом 2 во втором

dWinder 26.11.2018 10:35

Вам нужен array_merge_recursive()

$result = array_merge_recursive($arr2, $arr1);

Ресурсы

Другие вопросы по теме