【发布时间】:2018-06-08 12:06:03
【问题描述】:
我有以下代码,它打印给定数字的所有组合。当$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;
}
}
}
?>
【问题讨论】:
-
您的基本算法是:生成一个随机尝试,直到找到一个新尝试,然后在创建完所有尝试后,将它们显示在列表中。问题是,对于任何重复的数字,您永远不会达到组合的数量,因为它们不是唯一的。这不是你可以用蛮力解决的问题,除非你更聪明地计算总组合的数量。
-
请参阅this question 了解一些替代方法。
标签: php arrays fatal-error