上一篇文章介紹了 PHP 向數組添加元素的函數,本文將深入探討從數組移除元素的兩個核心函數:array_pop()(彈出尾部元素)與 array_shift()(移除首部元素)。通過閱讀 PHP 5.4 源碼發現,兩者均調用同一內部函數 _phpi_pop() 實現,僅通過參數控制行為差異。
源碼註解項目:我在 GitHub 上維護了更詳細的 PHP 5.4 源碼註解,歡迎 Star 關注:PHP5.4源碼注解,可通過 Commit 記錄查看已添加的註解。
mixed array_pop ( array &$array )
NULLmixed array_shift ( array &$array )
$arr = array('apple', 'banana', 'cat');
$val = array_pop($arr); // $val == 'cat', $arr 變為 ['apple', 'banana']
$arr = array('apple', 'banana', 'cat');
$val = array_shift($arr); // $val == 'apple', $arr 變為 [0 => 'banana', 1 => 'cat']
兩個函數均調用 _phpi_pop,區別在於第二個參數 off_the_end:
off_the_end = 1 → array_pop(操作尾部)off_the_end = 0 → array_shift(操作頭部)NULLoff_the_end 移動內部指針至目標元素(頭部或尾部)array_pop:僅需修改下一個數字索引位置array_shift:需重置所有數字鍵值(從 0 開始重排),字符串鍵值不變array_pop 流程圖
array_shift 流程圖
| 操作 | 指針移動 | 刪除後索引處理 |
|---|---|---|
| array_pop | 移至數組尾部 | 僅修改下一個數字索引位置 |
| array_shift | 移至數組首部 | 重置所有數字鍵值(0 起始),字符串鍵不變 |
當兩個函數實現邏輯高度相似時,可通過參數控制區分具體行為,避免代碼重複,體現了「Don't Repeat Yourself」原則在 C 層面的應用。
原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。如果本文對你有幫助,請點下推薦,謝謝^_^
更多源碼解析文章,歡迎訪問個人主頁:hoohack