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;
}
学分: