在所有可能的组合php中配对数组的所有元素

时间:2015-07-15 02:51:28

标签: php arrays

我已经做了一些搜索,我发现this不幸的是,这并不是我正在寻找的。

我的问题是,我有一个数组中的用户ID列表,其大小可能从0到30+用户不等。

看起来像是:

manifest: src/main/AndroidManifest.xml

我需要的是能够找到这些用户可能的所有对:

$arr = array(1,2,3);

我们的想法是能够在消息传递平台上创建联系人列表,以便每个人都在其联系人列表中互相拥有。

上面链接的问题的例子给了我重复的元素,我不能有重复的元素,也不需要3个元素,只有2个。

1 个答案:

答案 0 :(得分:1)

从我看来,你有两个目标:

  1. 显示 a b 数字之间的所有可能对
  2. 不要两次显示相同的组合
  3. You can achieve this有两个循环并跟踪您已处理的内容:

    $arr = range(1, 30);
    $alreadyProcessed = array();
    
    foreach ($arr as $first) {
        // Loop the array twice (as @Dagon mentioned)
        foreach ($arr as $second) {
            // Keep track of what you've already processed
            $combination = array($first, $second);
            // Sorting the numbers will ensure that 2 - 1 and 1 - 2 are the same
            sort($combination);
            // Ensure they aren't the same number and you haven't already processed them
            if ($first === $second || in_array($combination, $alreadyProcessed)) {
                continue;
            }
            // Output as per your example
            echo "($first - $second)" . PHP_EOL;
            // Add it to the list of what you've already processed
            $alreadyProcessed[] = $combination;
        }
    }
    

    注意:这种逻辑很糟糕。您正在执行指数级的重复,因为您在同一个数组的循环内循环一个数组。这个特殊的例子将执行30次重复30次(大量的循环)。这只有30个条目。如果您的用户群增长到10,000,会发生什么?再见服务器。