[PHP源碼閱讀]array_pop和array_shift函數,jsarraypopshift_PHP教程

來源:互聯網
上載者:User

[PHP源碼閱讀]array_pop和array_shift函數,jsarraypopshift


上篇文章介紹了PHP添加元素到數組的函數,那麼當然有從數組中刪除元素。array_pop和array_shift只從數組的頭或尾刪除一個元素。經過閱讀源碼,發現這兩個函數的實現都是調用了同一個函數--_phpi_pop來實現從數組中刪除一個數組元素的功能。因此解讀時將這兩個函數一併講了。

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

函數文法

array_pop

mixed array_pop ( array $&array )

array_pop函數彈出並返回數組的最後一個單元,並將數組長度減一。如果array為空白則返回NULL。

array_shift

mixed array_shift ( array &$array )

將數組開頭的單元移出數組並作為結果返回,將array長度減一併將所有數字索引值改為從0開始計數,文字索引值不變。

程式碼範例

下面代碼展示了array_pop和array_shift的使用方法

$arr = array(‘apple’, ‘banana’, ‘cat’);$val = array_pop($arr); // val == cat$arr = array(‘apple’, ‘banana’, ‘cat’);$val = array_shift($arr); // val == apple

執行步驟

兩個函數都是調用了_phpi_pop函數,區別不同的是調用_phpi_pop函數時傳遞的第二個參數off_the_end的不同,如果off_the_end是1,則是array_pop,否則是array_shift。下面是_phpi_pop這個函數執行的詳細步驟:

1、如果數組長度為0,則返回NULL。

2、根據off_the_end參數移動內部指標指向需要刪除的數組元素。

3、設定傳回值為第二步指標指向的元素。

4、從數組中移出第一個或最後一個值並將長度減一。

5、如果是array_shift操作,則需要重設數組下標,將數字下標改為從0開始計數,文字索引值不變;否則只需要修改下一個數字索引的位置。

6、重設array指標。

函數執行的過程可以用下面的流程圖描述:

array_pop

array_shift

array_pop和array_shift調用此函數執行的步驟都大同小異,不同之處在於:

1、在移動指標時,前者移動到數組尾部,後者移動指標到數組第一個單元。

2、刪除操作完成後,前者只需修改下一個數字索引的位置,而後者需要重設數組下標。

小結

如果兩個函數實現的步驟差不多,可以用一個參數區別執行的是哪一個函數以減少程式中重複的代碼。

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

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

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

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

http://www.bkjia.com/PHPjc/1130144.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1130144.htmlTechArticle[PHP源碼閱讀]array_pop和array_shift函數,jsarraypopshift 上篇文章介紹了PHP添加元素到數組的函數,那麼當然有從數組中刪除元素。array_pop和arra...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.