each() 接受陣列參考,回傳當前鍵值對並將內部指標前移一位。回傳陣列結構包含四個鍵:
0 / key:鍵名1 / value:值$arr = ['你','若','安','好','便','是','晴','天']; print_r(each($arr)); // Array([1]=>你 [value]=>你 [0]=>0 [key]=>0) print_r(each($arr)); // Array([1]=>若 [value]=>若 [0]=>1 [key]=>1)
reset($arr); // 重置指標
while ($tmp = each($arr)) {
echo "{$tmp['key']} ~ {$tmp['value']}
";
}
// 輸出 0~你 1~若 ... 7~天
注意:PHP 7.2 起 each() 已棄用,PHP 8.0 移除。現代代碼建議改用 foreach。
list() 是語言結構而非函式,用於數值索引陣列(索引必須從 0 開始連續)。
list($a, $b) = [10, 20]; echo "$a ~ $b"; // 10 ~ 20
list($a, $b, , $c) = [2=>10, 3=>20, 4=>30, 1=>40]; // 執行順序:$c=$arr[3]→20, $b=$arr[1]→40, $a=$arr[0]→Notice(無索引0) // 結果:Notice ~ 40 ~ 20
機制:list 先按左至右對應索引($a→[0], $b→[1], $c→[3]),再由右至左賦值。若索引缺失會觸發 Notice。
$arr = ['你','若','安','好','便','是','晴','天'];
while (list($k, $v) = each($arr)) {
echo "$k ~ $v
";
}
此寫法在 PHP 5 時代極常見,現已不推薦。現代替代方案:
foreach ($arr as $k => $v) { ... }
foreach ($arr as $k => &$v) 參考傳遞。each() / list() 組合遍歷。list() 仍適用於固定結構的數值索引陣列解構(如 list($w,$h,$type) = getimagesize($file);)。['key' => $val] 解構語法,更直觀:[$a, $b, , $c] = [1,2,3,4];