這篇文章介紹的內容是關於php中堆和棧的使用,有着一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
一、關於堆和棧的概念及區別
這裏參考上篇博客: 淺談堆和棧的區別
通過這篇文章,我們可以知道廣義的堆和棧到底是什麼,但是具體在php中的使用呢
二、php中的堆棧
衆所周知,PHP提供了一組函數可以用於push與pop(堆棧)還有shift與unshift(隊列)來操作數組元素。
1、push與pop
這兩個函數操作的是棧,遵循先進後出的原則。就像是往木桶裏面加東西一樣。通過array_push進行入棧操作,array_pop進行出棧操作。先進棧的部分在木桶的最下面。
(1)array_push()方法
1 |
|
(2)array_pop()方法
1 2 |
|
(3)實例:
1 2 3 4 5 6 7 |
|
三、php實現的隊列
1、什麼是隊列
首先應該明確,隊列和普通的堆棧是不一樣的,隊列遵循的是“先進先出”。堆棧只能在棧頂刪除和插入。隊列是每一個新插入的元素都是在隊列的尾部插入,每一個要刪除的元素都是位於隊列的頭部,當從隊列的頭部刪除了一個元素後,其它隊列中的元素就會向前進1位,在元素移動到隊首時,就會接受出隊的操作。
隊列模型可以理解爲排隊吃飯。先排隊的人就先吃到飯。
2、隊列的操作
php中使用array_push()來增加元素,使用array_shift()刪除元素。
(1)array_shift()方法
1 2 |
|
具體參考手冊:http://www.w3school.com.cn/php/func_array_shift.asp
(2)實例:
1 2 3 4 5 6 7 |
|
(3)雙端隊列
還有一種隊列比較特殊,首尾兩端都允許進行插入和刪除的操作,這種隊列可以稱爲雙端隊列,與標準的隊列不同的就是多了隊首的插入操作和隊尾的刪除操作。一般是通過php的數組函數:array_unshift()和array_shift()。
具體參考:PHP隊列原理及基於隊列的寫文件案例
四、隊列的用途
隊列可以很好地異步處理數據傳送和存儲,當你頻繁地向數據庫中插入數據、頻繁地向搜索引擎提交數據,就可採取隊列來異步插入。另外,還可以將較慢的處理邏輯、有併發數量限制的處理邏輯,通過消息隊列放在後臺處理,例如FLV視頻轉換、發送手機短信、發送電子郵件等。
end
相關推薦:
以上就是php中堆和棧的使用的詳細內容,更多請關注php中文網其它相關文章!