我有一组多维数组。每个数组代表搜索的结果集。我试图弄清楚如何过滤这组数据,只包括每个数组中的数组。
注意:下面显示的索引分别代表多维数组。每个数组都有一个深层嵌套的Id
密钥,可用于比较。
Id
位于:
$reference_variable['data']['Id'][0]
例如,
array(
array([0], [19], [21], [148]),
array([2], [21], [32], [44], [432], [549]),
array([13], [21], [148])
)
应该返回:
array(
[21]
)
和
array(
array([0], [12], [15]),
array([2], [21], [32], [44], [432], [549]),
array([13], [21], [148])
)
应该返回:
array(
[]
)
处理此问题的最佳方法是什么? array_intersect对多维数组不起作用。
我已经尝试将所有Id
存储在一个数组中,并使用array_count_values
查找重复的Id
,然后使用array_filter
来比较{当前数组的{1}}等于任何重复的Id
。
但事实证明这是完全错误的,因为这种方法允许:
Id
要返回:
array(
array([0], [19], [21], [148]),
array([2], [21], [32], [44], [432], [549]),
array([13], [21], [148])
)
这不是所有数组的交集。
答案 0 :(得分:0)
只需将第一个数组的索引存储在一个数组中。检查第二个阵列上的匹配索引,并将其存储在第二个阵列A2中。检查第二个存储阵列(A2)和第三个阵列之间的匹配。将其称为A3以保持一致性(A3)。这是你的答案。
可能有10到20行代码。
答案 1 :(得分:0)
这就是我的答案:
$params = array_merge($array_of_arrays, array('array_compare'));
$intersection = call_user_func_array('array_uintersect', $params);
function array_compare($a1, $a2)
{
if ($a1 === $a2) {
return 0;
}
if ($a1 > $a2) {
return 1;
}
return -1;
}