Удалить все дубликаты ключей и значений из MultiArray - PullRequest
0 голосов
/ 26 ноября 2018

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

Ввод:

// 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);

ОЖИДАЕМЫЙ ВЫХОД IS:

Как ввыше двух массивов подобласть с ключом [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,
    )
)

Ответы [ 3 ]

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

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

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

// 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 только 2 элемента в $arr2

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

То, что вы хотите, это array_merge_recursive()

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

Ресурсы

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

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

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