我想通过下面的类别中的数组键过滤掉多维数组中的重复项。
我必须使用数组
// $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数组具有相同的类别但其中的值不同,则它将显示相同的类别。
我在考虑循环使用类别和构建新数组,但是想知道是否有更简单的方法可以做到这一点。
任何提示和帮助都将不胜感激!
提前致谢!
答案 0 :(得分:1)
<?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);
输出:
array (
0 =>
array (
1 =>
array (
),
),
1 =>
array (
4 =>
array (
),
),
)
对于Php 5.5(看起来好像你可以跳过使用array_filter):
$ids = array_flip($ids);
$filtered = array_map(function($v) use ($ids) {
return array_diff_key($v, $ids);
}, $data);