Php 如何获得多维数组数组的交集?
我有一个多维数组。每个数组表示一个搜索结果集。我正在试图找出如何过滤这组数据,使其只包含每个数组中存在的数组 注:下面显示的索引分别表示多维数组。每个数组都有一个深度嵌套的Php 如何获得多维数组数组的交集?,php,arrays,Php,Arrays,我有一个多维数组。每个数组表示一个搜索结果集。我正在试图找出如何过滤这组数据,使其只包含每个数组中存在的数组 注:下面显示的索引分别表示多维数组。每个数组都有一个深度嵌套的Id键,可用于比较 Id位于: $reference\u变量['data']['Id'][0] 比如说, array( array([0], [19], [21], [148]), array([2], [21], [32], [44], [432], [549]), array([13], [21],
Id
键,可用于比较
Id
位于:
$reference\u变量['data']['Id'][0]
比如说,
array(
array([0], [19], [21], [148]),
array([2], [21], [32], [44], [432], [549]),
array([13], [21], [148])
)
应返回:
array(
[21]
)
array(
[]
)
以及:
应返回:
array(
[21]
)
array(
[]
)
处理这个问题的最佳方法是什么?无法很好地处理多维数组
我已经尝试将所有Id
存储在一个数组中,并使用array\u count\u value
查找重复的Id
s,然后使用array\u filter
比较当前数组的Id
是否等于任何重复的Id
但事实证明这是完全错误的,因为这种方法允许:
array(
array([0], [19], [21], [148]),
array([2], [21], [32], [44], [432], [549]),
array([13], [21], [148])
)
返回:
array(
[21, 148]
)
它不是所有数组的交集。只需将第一个数组的索引存储在一个数组中即可。检查第二个数组上的匹配索引,并将其存储在第二个数组中。检查第二个存储阵列(A2)和第三个阵列之间是否匹配。称之为A3以保持一致性(A3)。这是你的答案
可能有10-20行代码。这就是我的答案:
$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;
}
学分: