您好,登錄后才能下訂單哦!
本篇文章為大家展示了php中Data Structures擴展的作用是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
在 PHP 中因為數組太過強大,把這些數據結構都囊括進來了,所以不太需要去關注這些數據結構,久而久之這些概念也就淡化了,不是說 PHP 中沒有數據結構。
在 PHP 中有個擴展 Data Structures,這個擴展包含了這些常見的 數據結構。
優先級隊列 PriorityQueue
雙端隊列 Deque
隊列 FIFO(先進先出)
棧 LIFO(先進后出)
散列表 Hash
Set 集合
Map 字典
PriorityQueue 與 Queue 非常相似。 值被推入具有指定優先級的隊列中,具有最高優先級的值將始終位于隊列的前面。
注意
對于具有相同優先級的值,保留“先進先出”順序。
迭代 PriorityQueue 是破壞性的,相當于連續彈出操作,直到隊列為空。
默認容量是 8,可以手動設置容量,這個容量不是指隊列的長度,而是說存儲空間。再分配容量時確保有足夠的內存
如果該值小于或等于當前容量,容量將保持不變。
$queue = new Ds\PriorityQueue(); $queue->allocate(8);
當前手動設置了容量時,如果設置的容量大于實際占用容量,則返回設置的容量。反之,返回實際的容量。
$queue = new Ds\PriorityQueue(); // 此時返回默認值 8 $queue->capacity();
數值越大優先級越高
$queue = new Ds\PriorityQueue(); $queue->push('value1', 1); $queue->push('value2', 2);
$queue = new Ds\PriorityQueue(); $queue->push('沙僧', 2); $queue->push('唐僧', 5); $queue->push('白龍馬', 1); $queue->push('豬八戒', 3); $queue->push('孫悟空', 4); $cout = $queue->count(); for($i=0; $i<$cout; $i++) { echo $queue->pop(); echo PHP_EOL; }
唐僧 孫悟空 豬八戒 沙僧 白龍馬
MySQL 查詢時為了加快查詢速度,避免排序無法使用索引,沒有進行排序,在服務端代碼層面進行手動排序再返回。
其他應用場景...
有兩個指針分別指向頭部和尾部。分別可以在頭部和尾部進行插入和彈出。
支持數組語法(方括號)。
對于相同數量的值,比數組占用更少的內存。
當其大小下降到足夠低時,自動釋放分配的內存。
get()、set()、push()、pop()、shift()和unshift()都是O(1)。
設置的容量數值,必須是 2 的冪次方值,默認值是 8。比如2^2
insert()和remove()是O(n)。
雙端隊列 Deque
$deque = new Ds\Deque(); $deque->push(...['唐僧', '孫悟空', '豬八戒', '沙僧', '白龍馬']); $clone = $deque->copy(); $count = $deque->count(); echo '頭:'.$deque->first().PHP_EOL; echo '尾:'.$deque->last().PHP_EOL; echo '--- 從隊尾開始 ----'.PHP_EOL; for($i=0; $i<$count; $i++) { echo $deque->pop(); echo PHP_EOL; } echo '--- 從隊頭開始 ----'.PHP_EOL; for($i=0; $i<$count; $i++) { echo $clone->shift(); echo PHP_EOL; }
頭:唐僧 尾:白龍馬 --- 從隊尾開始 ---- 白龍馬 沙僧 豬八戒 孫悟空 唐僧 --- 從隊頭開始 ---- 唐僧 孫悟空 豬八戒 沙僧 白龍馬
多種應用場景
隊列是“先進先出”或“FIFO”集合,它只允許訪問隊列前面的值。
$queue = new Ds\Queue(); $queue->push('唐僧'); $queue->push(...['孫悟空', '豬八戒']); $queue->push(['沙僧', '白龍馬']); print_r($queue);
Ds\Queue Object ( [0] => 唐僧 [1] => 孫悟空 [2] => 豬八戒 [3] => Array ( [0] => 沙僧 [1] => 白龍馬 ) )
Stack 是一個“后進先出”或“LIFO”集合,它只允許訪問結構頂部的值。
$Stack = new Ds\Stack(); $Stack->push('唐僧'); $Stack->push(...['孫悟空', '豬八戒']); $Stack->push(...['沙僧', '白龍馬']); $cout = $Stack->count(); for($i=0; $i<$cout; $i++) { echo $Stack->pop(); echo PHP_EOL; }
白龍馬 沙僧 豬八戒 孫悟空 唐僧
Map 是鍵值對 [key=>value] 的順序集合,與數組相似。 鍵可以是任何類型,但必須是唯一的。 如果使用相同的鍵將值添加到地圖,后添加的則會替換之前的值。
鍵和值可以是任何類型,包括對象
支持數組語法。
保留插入順序。
性能和內存效率與數據相似。
當大小下降到足夠低時自動釋放分配的內存。
當對象作為鍵時,不能轉換為數組。
Set 是一系列唯一值,只有一組 key 不存儲 value,而且 key 不能重復。
值可以是任何類型,包括對象。
支持數組語法。
保留插入順序。
當大小下降到足夠低時自動釋放分配的內存。
add()、remove()和contains()復雜度都是O(1)。
不支持push()、pop()、insert()、shift()或unshift()
如果在被訪問的索引之前緩沖區中有被刪除的值,則get()為O(n),否則為O(1)。
存儲方式不同。Map 存儲的是 [key => value] 形式,Set 存儲的是 [...keys];
Map 和 Set 都是通過 key 來保證有序性的,所以是不允許修改 key 的。
上述內容就是php中Data Structures擴展的作用是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。