目錄
一、關於堆和棧的概念及區別
二、php中的堆疊
三、php實現的佇列
四、隊列的用途
首頁 後端開發 php教程 php中堆疊和棧的使用

php中堆疊和棧的使用

Apr 23, 2018 pm 05:26 PM
php 使用

這篇文章介紹的內容是關於php中堆和棧的使用,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

一、關於堆和棧的概念及區別


這裡參考上篇部落格: 淺談堆和堆疊的差異
透過這篇文章,我們可以知道廣義的堆和棧到底是什麼,但是具體在php中的使用呢

二、php中的堆疊

      眾所周知,PHP提供了一組函數可以用於push與pop(堆疊)還有shift與unshift(隊列)來操作數組元素。

1、push與pop

      這兩個函數操作的是堆疊,並遵循先進後出的原則。就像是往木桶裡面加東西一樣。透過array_push進行入棧操作,array_pop進行出棧操作。先進棧的部分在木桶的最下面。

(1)array_push()方法

array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。该函数等于多次调用 $array[] = $value。

(2)array_pop()方法

array_pop() 函数删除数组中的最后一个元素。
返回数组的最后一个值。如果数组是空的,或者非数组,将返回 NULL。

#( 3)實例:

 <?php
   $arr = array();
   array_push($arr,&#39;aaa&#39;);  //先入栈  aaa
   array_push($arr,&#39;bbb&#39;);  //后入栈   bbb
   print_r($arr);   //此时打印结果为:[0]=>aaa,[1]=>bbb
   $arr.pop();   //进行出栈操作,先进后出原则,则此时相当于bbb出栈了。
   print_r($arr);  //打印结果应该是[0]=>aaa?>

三、php實現的佇列

#1、什麼是佇列

      首先應該明確,佇列與普通的堆疊是不一樣的,佇列遵循的是「先進先出」。堆疊只能在棧頂刪除和插入。佇列是每一個新插入的元素都是在佇列的尾部插入,每一個要刪除的元素都是位於佇列的頭部,當從佇列的頭部刪除了一個元素後,其它佇列中的元素就會向前進1位,當元素移動到隊首時,就會接受出隊的操作。

隊列模型可以理解為排隊吃飯。先排隊的人先吃到飯。

2、佇列的操作

php中使用array_push()來增加元素,使用array_shift()刪除元素。

(1)array_shift()方法

array_shift() 函数删除数组中第一个元素,并返回被删除元素的值。
如果键名是数字的,所有元素都会获得新的键名,从 0 开始,并以 1 递增

#特定參考手冊:http://www.w3school.com.cn/php/func_array_shift.asp

(2)實例:

<?php
   $arr = array();
   array_push($arr,&#39;aaa&#39;);  //队列中添加  aaa
   array_push($arr,&#39;bbb&#39;);  // 队列中添加   bbb
   print_r($arr);  //此时打印输出为  [0]=>aaa,[1]=>bbb
   array_shift($arr); //删除第一个元素,遵循先进先出原则,删除的是aaa
   print_r($arr);  //打印结果为  [0]=>bbb?>

(3)雙端佇列

      也有一種佇列較為特殊,首尾兩端都允許進行插入和刪除的操作,這種隊列可以稱為雙端隊列,與標準的隊列不同的就是多了隊首的插入操作和隊尾的刪除操作。一般是透過php的陣列函數:array_unshift()和array_shift()。

具體參考:PHP隊列原則及基於隊列的寫文件案例

四、隊列的用途

      隊列可以很好地異步處理數據傳送和存儲,當你頻繁地向資料庫中插入資料、頻繁地向搜尋引擎提交數據,就可採取佇列來非同步插入。另外,還可以將較慢的處理邏輯、有並發數量限制的處理邏輯,透過訊息佇列放在後台處理,例如FLV視訊轉換、傳送手機簡訊、傳送電子郵件等。

end

相關推薦:

PHP中字串與正規表示式

#

以上是php中堆疊和棧的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP教程
1511
276
超越燈堆:PHP在現代企業體系結構中的作用 超越燈堆:PHP在現代企業體系結構中的作用 Jul 27, 2025 am 04:31 AM

PHPisstillrelevantinmodernenterpriseenvironments.1.ModernPHP(7.xand8.x)offersperformancegains,stricttyping,JITcompilation,andmodernsyntax,makingitsuitableforlarge-scaleapplications.2.PHPintegrateseffectivelyinhybridarchitectures,servingasanAPIgateway

PHP中的對象關聯映射(ORM)性能調整 PHP中的對象關聯映射(ORM)性能調整 Jul 29, 2025 am 05:00 AM

避免N 1查詢問題,通過提前加載關聯數據來減少數據庫查詢次數;2.僅選擇所需字段,避免加載完整實體以節省內存和帶寬;3.合理使用緩存策略,如Doctrine的二級緩存或Redis緩存高頻查詢結果;4.優化實體生命週期,定期調用clear()釋放內存以防止內存溢出;5.確保數據庫索引存在並分析生成的SQL語句以避免低效查詢;6.在無需跟踪變更的場景下禁用自動變更跟踪,改用數組或輕量模式提升性能。正確使用ORM需結合SQL監控、緩存、批量處理和適當優化,在保持開發效率的同時確保應用性能。

用PHP和RabbitMQ建造彈性微服務 用PHP和RabbitMQ建造彈性微服務 Jul 27, 2025 am 04:32 AM

要構建彈性的PHP微服務,需使用RabbitMQ實現異步通信,1.通過消息隊列解耦服務,避免級聯故障;2.配置持久化隊列、持久化消息、發布確認和手動ACK以確保可靠性;3.使用指數退避重試、TTL和死信隊列安全處理失敗;4.通過supervisord等工具守護消費者進程並啟用心跳機制保障服務健康;最終實現系統在故障中持續運作的能力。

為PHP創建準備生產的Docker環境 為PHP創建準備生產的Docker環境 Jul 27, 2025 am 04:32 AM

使用正確的PHP基礎鏡像並配置安全、性能優化的Docker環境是實現生產就緒的關鍵。 1.選用php:8.3-fpm-alpine作為基礎鏡像以減少攻擊面並提升性能;2.通過自定義php.ini禁用危險函數、關閉錯誤顯示並啟用Opcache及JIT以增強安全與性能;3.使用Nginx作為反向代理,限制訪問敏感文件並正確轉發PHP請求至PHP-FPM;4.採用多階段構建優化鏡像,移除開發依賴,設置非root用戶運行容器;5.可選Supervisord管理多個進程如cron;6.部署前驗證無敏感信息洩

VSCODE設置。 JSON位置 VSCODE設置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級或工作區級路徑,用於自定義VSCode設置。 1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區級路徑:項目根目錄下的.vscode/settings

在PHP中構建不變的物體,並具有可讀的屬性 在PHP中構建不變的物體,並具有可讀的屬性 Jul 30, 2025 am 05:40 AM

ReadonlypropertiesinPHP8.2canonlybeassignedonceintheconstructororatdeclarationandcannotbemodifiedafterward,enforcingimmutabilityatthelanguagelevel.2.Toachievedeepimmutability,wrapmutabletypeslikearraysinArrayObjectorusecustomimmutablecollectionssucha

無服務器革命:使用BREF部署可擴展的PHP應用程序 無服務器革命:使用BREF部署可擴展的PHP應用程序 Jul 28, 2025 am 04:39 AM

Bref使PHP開發者能無需管理服務器即可構建可擴展、成本高效的應用。 1.Bref通過提供優化的PHP運行時層,將PHP帶入AWSLambda,支持PHP8.3等版本,並與Laravel、Symfony等框架無縫集成;2.部署步驟包括:使用Composer安裝Bref,配置serverless.yml定義函數和事件,如HTTP端點和Artisan命令;3.執行serverlessdeploy命令即可完成部署,自動配置APIGateway並生成訪問URL;4.針對Lambda限制,Bref提供解決

深入了解PHP的內部垃圾收集機制 深入了解PHP的內部垃圾收集機制 Jul 28, 2025 am 04:44 AM

PHP的垃圾回收機制基於引用計數,但循環引用需靠週期性運行的循環垃圾回收器處理;1.引用計數在變量無引用時立即釋放內存;2.循環引用導致內存無法自動釋放,需依賴GC檢測並清理;3.GC在“可能根”zval達閾值或手動調用gc_collect_cycles()時觸發;4.長期運行的PHP應用應監控gc_status()、適時調用gc_collect_cycles()以避免內存洩漏;5.最佳實踐包括避免循環引用、使用gc_disable()優化性能關鍵區及通過ORM的clear()方法解引用對象,最

See all articles