可以用迴圈迭代字母。我很驚訝很少人知道這一點。
for($col = 'R'; $col != 'AD'; $col++) {
echo $col.' ';
}
會回傳:R S T U V W X Y Z AA AB AC
請注意,您不能使用 $col < 'AD'。它只適用於 !=
在處理 Excel 欄位時非常方便。
(PHP 4, PHP 5, PHP 7, PHP 8)
for
迴圈是 PHP 中最複雜的迴圈。它們的行為類似於 C 語言中的對應迴圈。 for
迴圈的語法如下:
for (expr1; expr2; expr3) statement
第一個運算式 (expr1) 會在迴圈開始時無條件地執行一次。
在每次迭代開始時,會執行 expr2。如果它的執行結果為 true
,迴圈會繼續,並執行巢狀的陳述式。如果它的執行結果為 false
,迴圈的執行就會結束。
在每次迭代結束時,會執行 expr3。
每個表達式都可以是空的,或包含多個以逗號分隔的表達式。在 expr2 中,所有以逗號分隔的表達式都會被執行,但結果取自最後一部分。 expr2 為空表示迴圈應無限期地運行(PHP 隱式地將其視為 true
,就像 C 語言一樣)。這可能不像您想像的那麼無用,因為您通常會希望使用條件式 break
陳述式來結束迴圈,而不是使用 for
的真值表達式。
請參考以下範例。它們都會顯示數字 1 到 10。
<?php
/* 範例 1 */
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
/* 範例 2 */
for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}
/* 範例 3 */
$i = 1;
for (; ; ) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}
/* 範例 4 */
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>
當然,第一個範例(或者可能是第四個)看起來最好,但您可能會發現在 for
迴圈中使用空表達式在許多情況下會很方便。
PHP 也支援 for
迴圈的替代「冒號語法」。
for (expr1; expr2; expr3): statement ... endfor;
對許多使用者來說,迭代陣列是很常見的事情,如下例所示。
<?php
/*
* 這是個包含一些我們想要在 for 迴圈中修改的資料的陣列。
*/
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0; $i < count($people); ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>
上述程式碼執行速度可能較慢,因為每次迭代都會擷取陣列大小。由於大小永遠不會改變,因此可以使用一個中間變數來儲存大小,而不是重複呼叫 count() 函式,這樣可以輕鬆最佳化迴圈。
<?php
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0, $size = count($people); $i < $size; ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>
可以用迴圈迭代字母。我很驚訝很少人知道這一點。
for($col = 'R'; $col != 'AD'; $col++) {
echo $col.' ';
}
會回傳:R S T U V W X Y Z AA AB AC
請注意,您不能使用 $col < 'AD'。它只適用於 !=
在處理 Excel 欄位時非常方便。
關於迴圈速度的重點是,中間和最後一個表達式會在每次迴圈時執行。
因此,您應該嘗試將所有不變的內容移出迴圈。
您通常會使用一個函式來檢查迴圈的最大次數。像這樣
<?php
for ($i = 0; $i <= somewhat_calcMax(); $i++) {
somewhat_doSomethingWith($i);
}
?>
更快的方法是
<?php
$maxI = somewhat_calcMax();
for ($i = 0; $i <= $maxI; $i++) {
somewhat_doSomethingWith($i);
}
?>
還有一個小技巧
<?php
$maxI = somewhat_calcMax();
for ($i = 0; $i <= $maxI; somewhat_doSomethingWith($i++)) ;
?>
在複製給函式後,$i 的值會改變(後置遞增)。