检查数组中键值的所有组合?

时间:2016-03-07 17:02:03

标签: php arrays multidimensional-array intersect

我有这个数据集可以使用:

Array
(
    [John Doe] => Array
        (
            [137] => 7
            [22] => 8
            [145] => 7
        )

    [George] => Array
        (
            [143] => 2
            [18] => 7
        )

    [Alisa Baumbach] => Array
        (
            [148] => 7
            [145] => 5
        )

)

现在我想知道我的密钥之间的用户数组之间是否至少有一个匹配。我会通过使用array_intersect_key执行此操作:

$matches = array_intersect_key($user_cor['John Doe'], $user_cor['Alisa Baumbach']);

这是一种工作方式,但这些值是硬编码的,我想通过它自动运行所有组合。我将如何检查是否:

  • 用户1数据与用户2相交
  • 用户2数据与用户3相交
  • 用户1数据与用户3相交

当然,由于我只想要独特的组合,所以这已经缩小为3次比较,而不是6次,因为我删除了双打。我该怎么做呢?

我知道这看起来很典型,除了我在措词方面有很多困难,更不用说寻找如何做到这一点的答案了。

在帮助我理解这个问题时,您将非常感激。

1 个答案:

答案 0 :(得分:0)

如下所示?

$keys = array_keys($user_cor);
for ($i = 0;$i < count($keys);$i++) {
    for ($j = $i+1;$j < count($keys);$j++) {
        $matches[$i.",".$j] = array_intersect_key($user_cor[$keys[$i]], $user_cor[$keys[$j]])
    }
}