[英]PHP while loop execution time
我在以下代碼中苦苦掙扎,無法找到解決方法。 該頁面加載時間太長,並且出現“致命錯誤:最長執行時間超過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 ++之后; 在firt循環結束時,代碼已解決了錯誤和長負載的問題,但僅在不考慮$ 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”,但是可以在生成顯示值的部分而不是$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
始終為真,因為$s
的值永遠不變。 如果您希望$s
在每個循環中增加,請像這樣遞增:
$s++;
$s = '0' . $s;
這只是在$s
之前添加前綴0
, $s
將是'01'
, '001'
, '0001'
...等等。
然后與整數6
比較, $s
將轉換為1
,
因此, $s
永遠不會超過$seasons
,它將導致無限循環。
與 ( $i
,無限循環實際上位於嵌套的while循環中。 ++$i;
)
如果您確實希望字符串以0
為前綴,則應該檢查字符串長度。
例:
if (strlen($s) < 10) {
您在外面缺少$ s ++時,請運行以下代碼:
$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++;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.