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

PHP 源碼深度解析:array_pop 與 array_shift 內部實現機制

     編輯:PHP 相關知識

PHP 源碼深度解析:array_pop 與 array_shift 內部實現機制

上一篇文章介紹了 PHP 向數組添加元素的函數,本文將深入探討從數組移除元素的兩個核心函數:array_pop()(彈出尾部元素)與 array_shift()(移除首部元素)。通過閱讀 PHP 5.4 源碼發現,兩者均調用同一內部函數 _phpi_pop() 實現,僅通過參數控制行為差異。

源碼註解項目:我在 GitHub 上維護了更詳細的 PHP 5.4 源碼註解,歡迎 Star 關注:PHP5.4源碼注解,可通過 Commit 記錄查看已添加的註解。

函數語法與行為差異

array_pop

mixed array_pop ( array &$array )
  • 彈出並返回數組最後一個單元
  • 數組長度減 1
  • 若數組為空則返回 NULL

array_shift

mixed array_shift ( array &$array )
  • 移出並返回數組第一個單元
  • 數組長度減 1
  • 數字鍵值重新從 0 開始索引,字符串鍵值保持不變

代碼示例

$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 內部流程)

兩個函數均調用 _phpi_pop,區別在於第二個參數 off_the_end:

  • off_the_end = 1 → array_pop(操作尾部)
  • off_the_end = 0 → array_shift(操作頭部)
  1. 若數組長度為 0,直接返回 NULL
  2. 根據 off_the_end 移動內部指針至目標元素(頭部或尾部)
  3. 將指針指向的元素值設置為返回值
  4. 從數組中移除該元素,長度減 1
  5. 關鍵差異:
    • array_pop:僅需修改下一個數字索引位置
    • array_shift:需重置所有數字鍵值(從 0 開始重排),字符串鍵值不變
  6. 重置數組內部指針

流程圖示意

array_pop 流程圖

array_shift 流程圖

核心差異總結

操作指針移動刪除後索引處理
array_pop移至數組尾部僅修改下一個數字索引位置
array_shift移至數組首部重置所有數字鍵值(0 起始),字符串鍵不變

設計啟示

當兩個函數實現邏輯高度相似時,可通過參數控制區分具體行為,避免代碼重複,體現了「Don't Repeat Yourself」原則在 C 層面的應用。

原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。如果本文對你有幫助,請點下推薦,謝謝^_^

更多源碼解析文章,歡迎訪問個人主頁:hoohack

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved