我正在努力使用以下代码,无法找到解决方法。该页面加载时间过长,出现“致命错误:超过30秒的最大执行时间”错误。
也许有人可以解释或提出建议?
<?php
$i = 1;
$s = 1;
$limit = 21;
$seasons = 6;
while ($s < $seasons) {
if ($s < 10) {
$s = '0' . $s;
}
while ($i < $limit) {
if ($i < 10) {
$i = '0' . $i;
}
echo '<input type="checkbox" value="S' . $s . 'E' . $i . '" name="rate"/>S' . $s . 'E' . $i . '<br/>';
++$i;
}
}
?>
谢谢
更新:
添加$ s ++之后;在第一个循环结束时,代码解决了错误和长时间加载,但它只运行一次,不考虑$ seasons = 6条件。知道为什么会这样吗?我试图删除0前缀,它仍然没有循环直到6
更新 问题解决了,第二个循环置于功能中并且工作正常。谢谢大家!。
最终版本
<?php
$s = 1;
$limit = 21;
$seasons = 7;
while ($s < $seasons) {
if ($s < 10) {
$s = '0' . $s;
}
episodes($s,$limit);
$s++;
}
function episodes($s,$limit){
$i = 1;
while ($i < $limit) {
if ($i < 10) {
$i = '0' . $i;
}
echo '<input type="checkbox" value="S' . $s . 'E' . $i . '" name="rate"/>S' . $s . 'E' . $i . '<br/>';
++$i;
}
}
?>
答案 0 :(得分:2)
首先,确保在执行比较时将整数与整数进行比较。如果您需要将其用于显示目的,可以在数字前添加“0”,但在生成显示值而不是$s
变量本身的部分中执行此操作:
$s_formatted = str_pad($s, 2, '0', STR_PAD_LEFT);
echo '<input type="checkbox" value="S' . $s_formatted . 'E' . $i . '" name="rate"/>S' . $s . 'E' . $i . '<br/>';
++$i;
这允许您删除当前执行此操作的代码部分中的“0”前缀。您可以删除这些行:
if ($s < 10) {
$s = '0' . $s;
}
最后,请务必增加$s
。在您当前的代码中,$s < $seasons
始终为true,因为$s
的值永远不会更改。如果您希望$s
随每个循环增加,请按以下方式递增:
$s++;
答案 1 :(得分:1)
$s = '0' . $s;
这只是在0
之前添加前缀$s
,$s
将是'01'
,'001'
,'0001'
...等等。
然后与整数6
进行比较,$s
将转换为1
,
所以$s
永远不会超过$seasons
,它会导致无限循环。
与($i
相同,无限循环实际上是嵌套的while循环。++$i;
)
如果你真的想要前缀为0
的字符串,那么你应该检查字符串长度。
示例:
if (strlen($s) < 10) {
答案 2 :(得分:-1)
你错过$ s ++ end of you outer,运行这段代码:
$i = 1;
$s = 1;
$limit = 21;
$seasons = 6;
while ($s < $seasons) {
if ($s < 10) {
$s = '0' . $s;
}
while ($i < $limit) {
if ($i < 10) {
$i = '0' . $i;
}
echo '<input type="checkbox" value="S' . $s . 'E' . $i . '" name="rate"/>S' . $s . 'E' . $i . '<br/>';
++$i;
}
$s++;
}