如何降低循环速度

kam*_*esh 0 php for-loop

我面临一个大问题.我需要生成精确的7个数字组合,并且我使用7个forloops编写了一个代码,并且它的工作正常,数量非常少.请检查附件,这样你就会非常清楚我需要什么.请提供PHP结果.

<?php
// I need the combinations for this commented numbers   
// 1, 7, 13, 19, 25, 31, 2, 8, 14, 20, 26, 32, 3, 9, 15, 
// 21, 27, 33, 4, 10, 16, 22, 28, 34, 5, 11, 17, 23, 29,
// 35, 6, 12, 18, 24, 30, 36
$string=array(1,7,13,19,25,31,2,8,14,20,26,32,3,9,15,21,27,33,4,10,16,22,28,34);
$len=count($string);
$c=0;
ob_start();
for ($e = 0; $e < $len - 6; $e++)
{
   for ($f = $e+1; $f < $len - 5; $f++)
   {
       for ($g = $f+1; $g < $len - 4; $g++)
       {
           for ($h = $g+1; $h < $len - 3; $h++)
           { 
               for ($i = $h+1; $i < $len - 2; $i++)
               {
                   for ($j = $i + 1; $j < $len - 1; $j++)
                   {
                        for ($k = $j + 1; $k < $len; $k++)
                        {
                             $c++;
                             $output[] = $string[$e] . "," . 
                                         $string[$f] . "," . 
                                         $string[$g] . "," .  
                                         $string[$h] . "," . 
                                         $string[$i] . "," . 
                                         $string[$j] . "," . 
                                         $string[$k];
                             ob_flush();
                        }
                        ob_flush();
                   }
                   ob_flush();
               }
               ob_flush();
           }
           ob_flush();
   }
   ob_flush();
}
ob_flush();
}
echo count($output);
?>
Run Code Online (Sandbox Code Playgroud)

我需要输出相同,如下所述.输出:

passed numbers $string=array(1, 7, 13, 19, 25, 31, 2, 8, 14) and the out put is below
count of combinations = 36
Array
(
    [0] => 1,7,13,19,25,31,2
    [1] => 1,7,13,19,25,31,8
    [2] => 1,7,13,19,25,31,14
    [3] => 1,7,13,19,25,2,8
    [4] => 1,7,13,19,25,2,14
    [5] => 1,7,13,19,25,8,14
    [6] => 1,7,13,19,31,2,8
    [7] => 1,7,13,19,31,2,14
    [8] => 1,7,13,19,31,8,14
    [9] => 1,7,13,19,2,8,14
    [10] => 1,7,13,25,31,2,8
    [11] => 1,7,13,25,31,2,14
    [12] => 1,7,13,25,31,8,14
    [13] => 1,7,13,25,2,8,14
    [14] => 1,7,13,31,2,8,14
    [15] => 1,7,19,25,31,2,8
    [16] => 1,7,19,25,31,2,14
    [17] => 1,7,19,25,31,8,14
    [18] => 1,7,19,25,2,8,14
    [19] => 1,7,19,31,2,8,14
    [20] => 1,7,25,31,2,8,14
    [21] => 1,13,19,25,31,2,8
    [22] => 1,13,19,25,31,2,14
    [23] => 1,13,19,25,31,8,14
    [24] => 1,13,19,25,2,8,14
    [25] => 1,13,19,31,2,8,14
    [26] => 1,13,25,31,2,8,14
    [27] => 1,19,25,31,2,8,14
    [28] => 7,13,19,25,31,2,8
    [29] => 7,13,19,25,31,2,14
    [30] => 7,13,19,25,31,8,14
    [31] => 7,13,19,25,2,8,14
    [32] => 7,13,19,31,2,8,14
    [33] => 7,13,25,31,2,8,14
    [34] => 7,19,25,31,2,8,14
    [35] => 13,19,25,31,2,8,14
)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ker 8

function factorial($factVal) {
    $factorial = 1;
    while ($factVal > 1) {
        $factorial *= $factVal--;
    }
    return $factorial ;
}

function permutations($numObjs,$numInSet) {
    return round(factorial($numObjs) / factorial($numObjs - $numInSet));
}

function combinations($numObjs,$numInSet) {
    return round(factorial($numObjs) / factorial($numObjs - $numInSet)) / factorial($numInSet);
}


$string=array(1,7,13,19,25,31,2,8,14,20,26,32,3,9,15,21,27,33,4,10,16,22,28,34); 
echo 'Number of Combinations = '.combinations(count($string),7).'<br />';
echo 'Number of Permutations = '.permutations(count($string),7).'<br />';
Run Code Online (Sandbox Code Playgroud)

  • Hurray实际使用数学! (2认同)