国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

淺談PHP源碼九:關于array_unshift, array_push的介紹

2020-03-22 18:35:56
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了關于淺談PHP源碼九:關于array_unshift, array_push的介紹,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

今天過年了,祝各位朋友新春快樂,萬事如意!

淺談PHP源碼九:關于array_unshift, array_push的介紹

int array_unshift ( array array, mixed var [, mixed ...] )

array_unshift() 將傳入的單元插入到 array 數組的開頭。注意單元是作為整體被插入的,因此傳入單元將保持同樣的順序。所有的數值鍵名將修改為從零開始重新計數,所有的文字鍵名保持不變。

返回 array 數組新的單元數目。

在standard/array.c的2080行,可以看到此函數的C實現 PHP_FUNCTION(array_unshift)

程序會先判斷輸入參數的個數是否正確,如果小于2則報錯
然后判斷第一個參數是否為數組,如果不是,報錯退出
然后程序會調用new_hash = php_splice(Z_ARRVAL_P(stack), 0, 0, args[1], argc-1, NULL);

HashTable* php_splice(HashTable *in_hash, int offset, int length, zval ***list, int list_count, HashTable **removed)
此函數在array.c的1861行
它會先將in_hash(原來的hashtable)復制一部分到新的hashtable,這里的一部分是根據所給的offset和length來計算,array_unshif所給的offset和length都為0,所以這里不復制任何元素給新的hashtable
然后遍歷list,針對每個元素分別創建一個zval并使用zend_hash_next_index_insert插入到新的hashtable
然后將in_hash中剩余的元素復制給新的hashtable,我們這里由于offset和length都為0,所以是全部的hashtable
最后,返回新生成的hashtable
整個過程就相當于先把list中的數據寫入hashtable,然后把舊的數據寫入hashtable,這樣就實現了在數組前面插入元素

然后刪除舊的數組所在的hashtable并刷新新HashTable,并重置hashtable的內部指針,
返回hashtable中元素的個數(即新生成的數組的長度)

int array_push ( array array, mixed var [, mixed ...] )

array_push() 將 array 當成一個棧,并將傳入的變量壓入 array 的末尾。array 的長度將根據入棧變量的數目增加。
和如下效果相同:

 ?php$array[] = $var;? 

并對每個 var 重復以上動作。

返回數組新的單元總數。

這個實現就比較簡單了:
直接遍歷所給的參數,對每個元素創建一個zval,并使其引用加一,加到數組所在hashtable的后面。
返回hashtable中元素的個數(即新生成的數組的長度)

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

淺談PHP源碼八:關于array_pop, array_shift的介紹

淺談PHP源碼七:關于nl2br, ltrim, rtrim, trim函數

淺談PHP源碼六:關于stream_get_wrappers函數

以上就是淺談PHP源碼九:關于array_unshift, array_push的介紹的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金湖县| 盘锦市| 和田县| 岳阳县| 体育| 丰都县| 揭东县| 汤阴县| 嘉兴市| 新营市| 郴州市| 历史| 临朐县| 宁蒗| 宣城市| 芜湖县| 洱源县| 裕民县| 绥德县| 手游| 若尔盖县| 兴海县| 修文县| 伊春市| 张掖市| 西畴县| 视频| 仪征市| 水城县| 靖边县| 句容市| 祥云县| 汉中市| 南丰县| 桂东县| 浑源县| 沈丘县| 镇平县| 泸水县| 陆良县| 札达县|