php - 从 MultiArray 中删除所有重复的键和值
问题描述
我想从两个数组中完全删除重复项(不删除重复项并获取唯一而不是全部删除)。我尝试使用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);
预期的输出是:
与上述两个数组一样,键 [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,
)
)
解决方案
您可以结合使用array-filter、array-search和array-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
推荐阅读
- javascript - typeerror: n is not a function while using jquery plugin
- sonarqube - 为什么 Visual Studio 的 SonarLint 中不存在某些 SonarQube 规则
- c# - 在asp.net webapi 2中加入两个表
- sql - 这个 SQL 命令有什么问题?它应该工作
- excel - 公式来查找列中最后一个填充的单元格并添加到它?
- jquery - 如何修复模态不是一个功能?
- json - Laravel:更新嵌套的 json 对象
- python - 列表python中的小写字典项
- java - 如何使用jdk8对ArrayList进行分组过滤