【问题标题】:I want to list all possible combination in single array by PHP我想通过 PHP 在单个数组中列出所有可能的组合
【发布时间】:2013-11-11 09:22:03
【问题描述】:

这是来自“How can I list all possible combinations?”的扩展问题。对于最后一个问题,它显示了所有排列而不是所有组合。

$num_array2 = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

foreach($num_array2 AS $value1) {
    foreach($num_array2 AS $value2) {
        if($value2 == $value1) {
            continue;
        }
        foreach($num_array2 AS $value3) {
            if($value3 == $value1 || $value3 == $value2) {
                continue;
            }
            foreach($num_array2 AS $value4) {
                if($value4 == $value1 || $value4 == $value2 || $value4 == $value3) {
                    continue;
                }
                foreach($num_array2 AS $value5) {
                    if($value5 == $value1 || $value5 == $value2 || $value5 == $value3 || $value5 == $value4) {
                        continue;
                    }
                    foreach($num_array2 AS $value6) {
                        if($value6 == $value1 || $value6 == $value2 || $value6 == $value3 || $value6 == $value4 || $value6 == $value5) {
                            continue;
                        }
                        echo "$value1, $value2, $value3, $value4, $value5, $value6 \n<br />";
                    }
                }
            }
        }
    }
}

结果将是:

1, 2, 3, 4, 5, 6 
1, 2, 3, 4, 5, 7 
1, 2, 3, 4, 5, 8 
1, 2, 3, 4, 5, 9 
1, 2, 3, 4, 5, 10 
1, 2, 3, 4, 6, 5 
1, 2, 3, 4, 6, 7 
1, 2, 3, 4, 6, 8 
1, 2, 3, 4, 6, 9 
1, 2, 3, 4, 6, 10 

如您所见,重复了“1、2、3、4、5、6”和“1、2、3、4、6、5”(尽管顺序不同)。我不希望显示像“1、2、3、4、6、5”这样的结果。我应该如何修改代码?

【问题讨论】:

  • 耶稣..这是从哪里来的?如果数组中有 50 个元素怎么办?
  • 运行一个有 50 个元素的代码需要很长时间,所以我先减少到 10 个元素来测试代码。
  • 我想列出组合而不是排列。

标签: php arrays foreach combinations


【解决方案1】:

忽略您的代码升级问题,您的问题在于您只是将输出限制为不包含重复数字。但是,您需要一个更强的约束:不要对两个不同的输出进行相同的选择,

更简单的方法是跟踪你已经选择了哪个数组位置:考虑一个位数组,只要 num_array2 ,这个数组代表一个选择,所以如果你已经占据了一个位置,i of num_array2 那么你的位数组应该在那个位置包含一个 1。

然后您可以将您的位数组存储在一组“选择签名”中,并为每个可能的输出检查其选择签名是否已经在该组中。

这是一个相当简单和愚蠢的解决方案,但我认为它可以帮助您理解您的问题。

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2015-04-13
    • 1970-01-01
    相关资源
    最近更新 更多