如何获得多维数组数组的交集?

时间:2015-07-03 22:56:08

标签: php arrays

我有一组多维数组。每个数组代表搜索的结果集。我试图弄清楚如何过滤这组数据,只包括每个数组中的数组。

注意:下面显示的索引分别代表多维数组。每个数组都有一个深层嵌套的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])
)

这不是所有数组的交集。

2 个答案:

答案 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;
}

信用:https://stackoverflow.com/a/2020654/1911755