首页 > 解决方案 > 从 MultiArray 中删除所有重复的键和值

问题描述

我想从两个数组中完全删除重复项(不删除重复项并获取唯一而不是全部删除)。我尝试使用array_merge,array_filterarray_uniqueunseting。所有只是删除重复项,但不会删除所有重复的键和值。

输入:

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

标签: phparraysmultidimensional-array

解决方案


您可以结合使用array-filterarray-searcharray-column

考虑使用以下内容:

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


推荐阅读