首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP each 與 list 函式深度解析與陣列遍歷實戰

     編輯:PHP 綜合知識

each():逐步取得鍵值對並前移指標

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():單次操作將陣列值賦予多變數

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。

經典組合:each() + list() 遍歷陣列

$arr = ['你','若','安','好','便','是','晴','天'];
while (list($k, $v) = each($arr)) {
    echo "$k ~ $v
"; }

此寫法在 PHP 5 時代極常見,現已不推薦。現代替代方案:

foreach ($arr as $k => $v) { ... }
  • 效能更好、語法更清晰、支援所有陣列類型。
  • 若需修改原陣列值,使用 foreach ($arr as $k => &$v) 參考傳遞。

實務建議

  1. 新專案勿使用 each() / list() 組合遍歷。
  2. 維護舊代碼時,理解其指標移動與賦值順序機制,避免重構導致邏輯錯誤。
  3. list() 仍適用於固定結構的數值索引陣列解構(如 list($w,$h,$type) = getimagesize($file);)。
  4. PHP 7.1+ 支援 ['key' => $val] 解構語法,更直觀:
    [$a, $b, , $c] = [1,2,3,4];
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved