打印数组时超出最大执行时间

Maximum executiontime exceeded when printing array

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

我收到以下错误:

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;
        }
    }
}
?>

直到$numbersdrawn中的组合数等于$factorialwhile循环才会停止。但是当有重复的时候,没有那么多不同的组合,因为有些组合是完全相同的。

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

但是如果数字是1、2、2,那么组合只有122、212、221

需要用$factorial除以重复元素的个数得到$quantitycombinations