Я хочу полностью удалить дубликаты (НЕ УДАЛЕНИЕ ДУБЛИКАТОВ И ПОЛУЧЕНИЕ УНИКАЛЬНОГО АНАЛИЗА УДАЛЕНИЕ ИХ ВСЕХ) из двух массивов. Я пробовал использовать значения 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,
)
)
@TimBiegeleisen Обновлено!
Я бы посоветовал включить предупреждения. Приведенный выше код порождает около 50 из них. Все, что похоже на [user], является незаконным индексом. Обычно user не определен и преобразуется в 'user', а ['user'] производит недопустимое смещение.
Я попытался преобразовать его из кодировки json
@MR_AMDEV, Php имеет хотя бы одну функцию для декодирования JSON - json_decode()
@EugeneAnisiutkin ок, я просто пытался показать через print_r php
@MR_AMDEV, Coudl вы, может быть, код сами предоставите? Всем было бы легче найти проблему. Вывод Print_r не очень подходит для создания проверяемого кода.
Позвольте нам продолжить обсуждение в чате.






Вы можете попытаться перебрать массивы и добавить только недубликаты в другой массив и вернуть этот массив.
Может быть, пример? Во всяком случае, есть функция array_unique(). В большинстве случаев это должно помочь.
@EugeneAnisiutkin array_unique не удаляет все совпадающие / похожие, но удаляет дубликаты и возвращает один из них, который является последним в индексе. Но я просто хочу удалить все дубликаты и не хочу получать один из них.
Вы можете использовать комбинацию массив-фильтр, поиск по массиву и столбец-массив:
Рассмотрите возможность использования следующего:
// 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);
Просто оставил свой компьютер - проверю, когда вернусь
Работает на моих примерах как шарм. Также кажется намного лучше, чем array_diff_key, потому что array_diff_key не подходит для многомерных массивов.
@MR_AMDEV Я пробовал, что array_diff_key не работает - он сравнивает ключ (целое число в вашем случае), поэтому мой тестовый пример не выполняется, потому что user1 находился под ключом 0 в первом массиве, но ключом 2 во втором
Вам нужен array_merge_recursive()
$result = array_merge_recursive($arr2, $arr1);
Возможно, вы захотите задать более простой вопрос, который позволит легко увидеть, в чем проблема с дубликатами в ваших данных.