打印阵列时超出最大执行时间

问题描述 投票:1回答:1

我有以下代码,它打印给定数字的所有组合。当$numbers包含两个相等的数字时,它会返回致命错误。

我收到以下错误:

Fatal error: Maximum execution time of 30 seconds exceeded in
C:/Apache24/htdocs/index.php on line 18

我的代码:

<?php
$numbers = array("2","1","4");
$numberofelements = count($numbers);
$factorial = 1;
for ($i=1; $i<=$numberofelements; $i++)
{
         $factorial *= $i;
}
$quantitycombinations = $factorial;
$numbersdrawn = array();
while(true)
{
    $exists = false;
    $numberdrawn1 = "";
    shuffle($numbers);
    $numberdrawn1 = implode("", $numbers);
    strval($numberdrawn1);
    foreach ($numbersdrawn as $value) {
            if(strval($value)==$numberdrawn1)
            {
                $exists = true;
            }
        }
    if(!$exists){
        array_push($numbersdrawn, $numberdrawn1);
        if(count($numbersdrawn)==$quantitycombinations)
        {
            foreach($numbersdrawn as $item)
            {
                echo $item."<br>";          
            }
            break;
        }
    }
}
?>
php arrays fatal-error
1个回答
0
投票

while循环不会停止,直到$numbersdrawn中的组合数等于$factorial。但是当存在重复时,没有那么多不同的组合,因为一些组合彼此相同。

例如。如果数字是1,2,3,则组合是123,132,213,231,312,321。

但如果数字是1,2,2,则组合仅为122,212,221。

你需要将$factorial除以重复元素的数量来获得$quantitycombinations

© www.soinside.com 2019 - 2024. All rights reserved.