【问题标题】:Create dynamic for loop PHP function for all potential combinations为所有可能的组合创建动态 for 循环 PHP 函数
【发布时间】:2012-04-04 02:08:03
【问题描述】:

下面的代码将为您有四个不同变量时可能出现的所有可能组合创建一个数组。变量总是需要等于 1。我创建的 for 循环可以工作,并且我了解如何使它适用于更多变量,但是我可以使这个动态吗?我需要一个函数,它有多少个变量作为参数。如果有三个变量,则创建三个 forloop。如果有 10 个...创建 10 个对应的 for 循环以确定所有可能的组合。

$anarray2 = array();
for( $a = 1; $a <= 97; $a++ ) {
  for( $b = 1; $a + $b <=98 ; $b++ ) {
    for( $c = 1; $a + $b + $c <= 99; $c++ ) {
      $d = 100 - ( $a + $b + $c );
      $var_1 = $a / 100;
      $var_2 = $b / 100;
      $var_3 = $c / 100;
      $var_4 = $d / 100;
      $anarray2[] = array( $var_1, $var_2, $var_3, $var_4 );
    }
  }
}
print_array( $anarray2 );

【问题讨论】:

  • 您在寻找笛卡尔积算法吗?已经有很多了...
  • 你能给我一个例子的链接吗?我以前从未听说过这个......是时候谷歌了。
  • 从这里开始:stackoverflow.com/…
  • 我认为您可能是对的,但我不确定实施情况。我会继续寻找......

标签: php for-loop combinations


【解决方案1】:

您实际上希望以各种不同的方式将 I 相同的项目分享给 N 人。

如果有一个人 (N==1),那么只有一种方法可以做到这一点 - 给那个人所有 I 项目。

如果有不止一个人 (N&gt;1),那么我们可以考虑可以给第一个人分配多少个项目,然后在每种情况下,剩下的 N-1 人可能分配什么。

这导致了一个很好的递归解决方案。首先我们为N=1解决问题:

function assign($I, $N) {
    $anarray = array();

    if ($N == 1) {
        $anarray[] = array($I);
    } else {
        // Coming up...
    }

return $anarray;
}

现在我们用N=k-1 来解决N=k(某个常数)的问题——也就是说,我们使用解决方案来解决问题。这将在N=1时一直返回解决方案。

function assign($I, $N) {
    $anarray = array();

    if ($N == 1) {
        $anarray[] = array($I);
    } else {
        for ($i = $I; $i < $I; $i++) {
            foreach (assign($I - $i, $N - 1) as $subproblem) {
                $anarray[] = array_merge(array($i), $subproblem);
            }
        }
    }

    return $anarray;
}    

类似的东西应该可以完成这项工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    相关资源
    最近更新 更多