## *for*
(PHP 4, PHP 5, PHP 7)
*for* 循環是 PHP 中最復雜的循環結構。它的行為和 C 語言的相似。 *for* 循環的語法是:
~~~
for (expr1; expr2; expr3)
statement
~~~
第一個表達式(expr1)在循環開始前無條件求值(并執行)一次。
expr2 在每次循環開始前求值。如果值為 **`TRUE**`,則繼續循環,執行嵌套的循環語句。如果值為 **`FALSE**`,則終止循環。
expr3 在每次循環之后被求值(并執行)。
每個表達式都可以為空或包括逗號分隔的多個表達式。表達式 expr2 中,所有用逗號分隔的表達式都會計算,但只取最后一個結果。expr2 為空意味著將無限循環下去(和 C 一樣,PHP 暗中認為其值為 **`TRUE**`)。這可能不像想象中那樣沒有用,因為經常會希望用有條件的 [*break*](http://php.net/manual/zh/control-structures.break.php) 語句來結束循環而不是用 *for* 的表達式真值判斷。
考慮以下的例子,它們都顯示數字 1 到 10:
```
<?php
/*?example?1?*/
for?($i?=?1;?$i?<=?10;?$i++)?{
????echo?$i;
}
/*?example?2?*/
for?($i?=?1;?;?$i++)?{
????if?($i?>?10)?{
????????break;
????}
????echo?$i;
}
/*?example?3?*/
$i?=?1;
for?(;;)?{
????if?($i?>?10)?{
????????break;
????}
????echo?$i;
????$i++;
}
/*?example?4?*/
for?($i?=?1,?$j?=?0;?$i?<=?10;?$j?+=?$i,?print?$i,?$i++);
?>
```
當然,第一個例子看上去最簡潔(或者有人認為是第四個),但用戶可能會發現在 *for* 循環中用空的表達式在很多場合下會很方便。
PHP 也支持用冒號的 *for* 循環的替代語法。
~~~
for (expr1; expr2; expr3):
statement;
...
endfor;
~~~
有時經常需要像下面這樣例子一樣對數組進行遍歷:
```
<?php
/*
?*?此數組將在遍歷的過程中改變其中某些單元的值
?*/
$people?=?Array(
????????Array('name'?=>?'Kalle',?'salt'?=>?856412),?
????????Array('name'?=>?'Pierre',?'salt'?=>?215863)
????????);
for($i?=?0;?$i?<?count($people);?++$i)
{
????$people[$i]['salt']?=?rand(000000,?999999);
}
?>
```
以上代碼可能執行很慢,因為每次循環時都要計算一遍數組的長度。由于數組的長度始終不變,可以用一個中間變量來儲存數組長度以優化而不是不停調用 [count()](http://php.net/manual/zh/function.count.php):
```
<?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']?=?rand(000000,?999999);
}
?>
```
- 序言
- 簡介
- PHP是什么?
- PHP能做什么?
- 基本語法
- 類型
- boolean(布爾型)
- integer(整型)
- float(浮點型)
- string(字符串)
- array(數組)
- object(對象)
- callable(可調用)
- resource(資源)
- NULL(無類型)
- 偽類型
- 類型轉換的判別
- 變量
- 基礎
- 預定義變量
- 變量范圍
- 可變變量
- 來自PHP之外的變量
- 常量
- 語法
- 魔術常量
- 表達式
- 運算符
- 運算符優先級
- 算術運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 錯誤控制運算符
- 執行運算符
- 遞增/遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- if
- else
- elseif/else if
- 流程控制的替代語法
- while
- do-whille
- for
- foreach
- break
- continue
- switch
- declare
- return
- require
- include
- require_once
- include_once
- goto
- 函數
- 用戶自定義函數
- 函數的參數
- 返回值
- 可變函數
- 內部 (內置)函數
- 匿名函數
- 類與對象
- 簡介
- 基本概念
- 屬性
- 類的自動加載
- 構造函數
- 訪問控制(可見性)