この記事では、PHP ソース コード 8: array_pop と array_shift について紹介します。必要な方は参考にしてください。中国の旧正月、休暇の時期が来ました。いくつかのことを片付ける必要があり、家に帰る準備をしている人もいます。
私が家に帰らなかったのは今年初めてです。 。 。 。 。
どうやら一週間も該当のソースコードを見ていなかったようですが、もうやる気がなくなったのでしょうか?
私はナンセンスなことを言ったようです。 。 。
standard/array.c には、array_pop と array_shift という 2 つの関数の C 実装があります。
mixed array_pop (array &array)
array_pop() ポップして配列を返します。配列の最後の要素で、配列の長さを 1 つ減らします。配列が空の場合 (または配列ではない場合)、NULL が返されます。
注: この関数を使用した後、配列ポインタはリセットされます (reset())。
mixed array_shift (array &array)
array_shift() 配列の最初の要素をシフトして結果として返し、配列の長さを 1 つ減らし、他のすべての要素を 1 つ前にシフトします。すべての数値キー名は 0 から数えるように変更され、テキスト キー名は変更されません。配列が空の場合 (または配列ではない場合)、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);}
プログラムは最初に入力を決定します。配列内に要素があるかどうかを判断します。
If it is array_pop:==>zend_hash_internal_pointer_end
==>zend_hash_internal_pointer_end_ex(ht, NULL)
この時点で直接、ハッシュテーブル内の二重リンクリストの最後の要素を返します。 ht->pInternalPointer = ht->pListTail;
array_shift の場合:
= =>zend_hash_internal_pointer_reset_ex(ht, NULL)
このとき、ハッシュテーブル内の二重リンクリストの最初の要素が直接返されます。 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;
を通じて戻り値を取得します。
ハッシュテーブルの値を取得します。次に、ハッシュテーブルのキー値を削除し、zend_hash_internal_pointer_reset を呼び出してハッシュテーブルをリセットします。
このリセットは: ht->pInternalPointer = ht->pListHead;
つまり、現在位置をリンクされたリストの最初の要素に設定します。
PHP ソース コード 7 についての簡単な説明: nl2br、ltrim、rtrim、trim 関数について
# PHP ソース コード 6 についての簡単な説明: stream_get_wrappers 関数について
PHP ソース コード 5 についての簡単な説明: 配列 array の作成について
以上がPHP ソース コードの簡単な説明 8: array_pop、array_shift の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。