程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> [PHP源碼閱讀]array_push和array_unshift函數,arrayunshift

[PHP源碼閱讀]array_push和array_unshift函數,arrayunshift

編輯:關於PHP編程

[PHP源碼閱讀]array_push和array_unshift函數,arrayunshift


在PHP中,在數組中添加元素也是一種很常用的操作,分別有在數組尾部和頭部添加元素,看看PHP內部是如何實現數組插入的操作。

我在github有對PHP源碼更詳細的注解。感興趣的可以圍觀一下,給個star。PHP5.4源碼注解。可以通過commit記錄查看已添加的注解。

 

array_push

int array_push ( array &$array , mixed $value1 [ , mixed $... ] )

array_push函數將array參數看做一個棧,將傳遞進來的變量壓倒array的尾部。array的長度隨著被壓進去的變量個數增加。下面的代碼有意義的效果:

 $array[] = $var; 

如果只需要添加一個元素到數組,使用$array[] 這種方式更好,因為這樣做不用調用函數。

運行示例

$arr = array();
array_push($arr, 1, 2, 3); // return 3; $arr = [1, 2, 3]

運行步驟

array_push函數相對比較簡單,就相當於壓棧操作,把array看做一個棧,然後對每一個參數,讓其變成引用,引用數加一,然後添加它到數組的尾部。

內部實現的流程圖如下:

$arr = array(1, 2, 3); array_unshift($arr, 4, 5, 6); // 4 5 6 1 2 3

運行步驟

1、調用php_splice將數據元素插入到數組頭部,用新的哈希表替換就得哈希表並將其銷毀

2、如果操作後的stack等於運行時的符號表,則重置哈希表的內部指針

3、stack指向新的哈希表,釋放新的哈希表紅箭,銷毀就得哈希表

源碼解讀

由上面的步驟可知,array_unshift的核心步驟是php_splice函數。對於array_unshift函數,php_splice實現時新建一個哈希表out_hash,將需要插入的list數據先插入到out_hash中,然後再把原來的數組數據寫入到out_hash中,這樣實現在數組前面插入數據元素的功能。

實現的效果圖如下:


這次閱讀源碼過程中,同時也研究了PHP中的哈希表數據結構及一些API,也給自己補充了一些哈希表的知識。學習到了PHP底層是使用雙向鏈表做哈希沖突的處理,獲益匪淺。日後再做關於PHP數據結構的分享。

 

原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。

如果本文對你有幫助,請點下推薦吧,謝謝^_^

 

最後再安利一下,我在github有對PHP源碼更詳細的注解。感興趣的可以圍觀一下,給個star。PHP5.4源碼注解。可以通過commit記錄查看已添加的注解。

更多源碼文章,歡迎訪問個人主頁繼續查看:hoohack

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved