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

來源:互聯網
上載者:User
這篇文章主要介紹了關於淺談PHP源碼八:關於array_pop, array_shift的介紹,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

要過年了,要放假了,一些事情需要收尾了,一些人也準備回家了,
今年第一次沒有回家。。。。。

貌似也有一個星期沒有看相關的源碼了,是不是上進心沒有了?
看樣子不能因為某些原因放鬆對自己的要求,又買了兩本書,上個月買的書才看完了一本,要加油了!。。

貌似說了一些廢話。。。

在standard/array.c中我們可以找到 array_pop, array_shift這2個函數的C實現

mixed array_pop ( array &array )

array_pop() 彈出並返回 array 數組的最後一個單元,並將數組 array 的長度減一。如果 array 為空白(或者不是數組)將返回 NULL

注意: 使用本函數後會重設(reset())數組指標

mixed array_shift ( array &array )

array_shift() 將 array 的第一個單元移出並作為結果返回,將 array 的長度減一併將所有其它單元向前移動一位。所有的數字鍵名將改為從零開始計數,文字鍵名將不變。如果 array 為空白(或者不是數組),則返回 NULL。

注意: 使用本函數後會重設(reset())數組指標

這兩個函數在實現上都是使用的

   /* {{{ proto mixed array_pop(array stack)   Pops an element off the end of the array */PHP_FUNCTION(array_pop){ _phpi_pop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);}/* }}} */ /* {{{ proto mixed array_shift(array stack)   Pops an element off the beginning of the array */PHP_FUNCTION(array_shift){ _phpi_pop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);}

程式首先判斷輸入,然後判斷數組中是否有元素,如果數組為空白直接返回,
如果是array_pop:
==>zend_hash_internal_pointer_end
==>zend_hash_internal_pointer_end_ex(ht, NULL)
此時直接返回hashtable中雙向鏈表的最後一個元素 ht->pInternalPointer = ht->pListTail;

如果是array_shift:
==>zend_hash_internal_pointer_reset(Z_ARRVAL_PP(stack));
==>zend_hash_internal_pointer_reset_ex(ht, NULL)
此時直接返回hashtable中雙向鏈表的第一個元素 ht->pInternalPointer = ht->pListHead;

得到傳回值,通過

  zend_hash_get_current_data ==> zend_hash_get_current_data_ex(ht, pData, NULL)  p = pos ? (*pos) : ht->pInternalPointer;*pData = p->pData;

取得hashtable中的值
然後刪除hashtable中的這個key值,並調用zend_hash_internal_pointer_reset重設hashtable
這個重設就是:ht->pInternalPointer = ht->pListHead;
即把當前的位置設定為鏈表的第一個元素。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.