Php 按关键字下的元素筛选出重复的数组
我想通过下面类别中的数组键从多维数组中筛选出重复项 我得走了Php 按关键字下的元素筛选出重复的数组,php,arrays,filtering,Php,Arrays,Filtering,我想通过下面类别中的数组键从多维数组中筛选出重复项 我得走了 // $selectedOffers Array ( [Category1] => Array ( [2424] => Array ( [node_name] => Name2424 ) [2525] => Array
// $selectedOffers
Array
(
[Category1] => Array
(
[2424] => Array
(
[node_name] => Name2424
)
[2525] => Array
(
[node_name] => Name2525
)
)
[Category2] => Array
(
[2121] => Array
(
[node_name] => Name2121
)
[2222] => Array
(
[node_name] => Name2222
)
)
)
// $myProducts
Array
(
[Category1] => Array
(
[2323] => Array
(
[node_name] => Name2323
)
[2525] => Array
(
[node_name] => Name2525
)
)
)
为了过滤掉它们,我使用了array_diff_key$selectedOffers,$myProducts。问题在于,它是按类别过滤的,而不是按子元素过滤的。因此,如果$selectedOffers和$myProducts数组具有相同的类别,但其中的值不同,它仍将显示相同的类别
我在考虑循环槽类别和构建新阵列,但想知道是否有更简单的方法来实现这一点
任何提示和帮助都将不胜感激
提前谢谢
<?php
$data =
[
[
1 => [],
2 => []
],
[
3 => [],
4 => []
]
];
$mine =
[
[
2 => []
],
[
3 => [],
5 => []
]
];
$ids = [];
foreach($mine as $outer)
foreach($outer as $k => $v)
$ids[] = $k;
$filter = function($k) use ($ids) {
return false === array_search($k, $ids);
};
$filtered = array_map(function($v) use ($filter) {
return array_filter($v, $filter, ARRAY_FILTER_USE_KEY);
}, $data);
var_export($filtered);
对于Php 5.5,似乎可以跳过使用数组过滤器:
$ids = array_flip($ids);
$filtered = array_map(function($v) use ($ids) {
return array_diff_key($v, $ids);
}, $data);
我知道我已经接受了答案,但是在PHP5.5中有什么方法可以做到这一点吗?顺便说一下,写得很好的代码:添加了数组_过滤器的替代方案,请检查它是否按预期工作。谢谢,只是一个离题的问题,我如何学习编写如此整洁的代码:不确定你说的整洁是什么意思?
$ids = array_flip($ids);
$filtered = array_map(function($v) use ($ids) {
return array_diff_key($v, $ids);
}, $data);