php基于双向循环队列实现历史记录的前进后退等功能
这篇文章主要介绍了php基于双向循环队列实现历史记录的前进后退等功能,较为详细的分析了php使用历史记录功能所涉及的相关技巧与实现方法,具有一定参考借鉴价值,
本文实例讲述了php基于双向循环队列实现历史记录的前进后退等功能。分享给大家供大家参考。具体如下:
为实现一个记录操作历史的功能
1. 和撤销,反撤销功能类似的一个功能。(实现操作的前进后退)
2. 和discuz论坛登录后查看帖子(可以前进后退查看过的帖子,还有帖子查看历史记录)
3. 逻辑和windows资源管理器地址栏前进后退功能一样。
根据这种需要,实现了一个数据结构。写了一个通用的类,暂叫历史记录类吧。
【原理和时钟类似。实例化对象时可以构造长度为N(可以根据需要定长度)个节点的环】
然后整合各种操作。前进、后退、插入、修改插入。
类可以构造一个数组。或者传入数组参数构造一个对象。 每次操作之后可以取得操作后的数组。 操作完的 数据可以根据自己的需要以合适的方式保存。 放在cookie,session里面,,或者序列化,或转为json数据保存在数据库里,或者放在文件里面都可以。 方便下一次使用。
为了便于扩展,存放更多的数据。具体每一条数据也是一条数组记录。
比如根据需要进行扩展:array('path'=>'D:/www/','sss'=>value)
顺便贴出,自己写的调试变量用的一个文件。
1. pr()可以格式化并高亮输出变量。pr($arr),pr($arr,1)是输出后退出。
2. debug_out() 用来输出多个变量。默认为退出。
3. debug_out($_GET,$_SERVER,$_POST,$arr);
history.class.php文件:
20, //队列节点总共个数 'first'=>0, //起始位置,从0开始。数组索引值 'last'=>0, //终点位置,从0开始。 'back'=>0, //从first位置倒退了多少步,差值。 'history'=>array( //数组,存放操作队列。 array('path'=>'D:/'), array('path'=>'D:/www/'), array('path'=>'E:/'), array('path'=>'/home/') …… ) ) */ class history{ var $history_num; var $first; var $last; var $back; var $history=array(); function __construct($array=array(),$num=12){ if (!$array) {//数组为空.构造一个循环队列。 $history=array(); for ($i=0; $i '')); } $array=array( 'history_num'=>$num, 'first'=>0,//起始位置 'last'=>0,//终点位置 'back'=>0, 'history'=>$history ); } $this->history_num=$array['history_num']; $this->first=$array['first']; $this->last=$array['last']; $this->back=$array['back']; $this->history=$array['history']; } function nextNum($i,$n=1){//环路下n一个值。和时钟环路类似。 return ($i+$n)history_num ? ($i+$n):($i+$n-$this->history_num); } function prevNum($i,$n=1){//环路上一个值i。回退N个位置。 return ($i-$n)>=0 ? ($i-$n) : ($i-$n+$this->history_num); } function minus($i,$j){//顺时针两点只差,i-j return ($i > $j) ? ($i - $j):($i-$j+$this->history_num); } function getHistory(){//返回数组,用于保存或者序列化操作。 return array( 'history_num'=> $this->history_num, 'first' => $this->first, 'last' => $this->last, 'back' => $this->back, 'history' => $this->history ); } function add($path){ if ($this->back!=0) {//有后退操作记录的情况下,进行插入。 $this->goedit($path); return; } if ($this->history[0]['path']=='') {//刚构造,不用加一.首位不前移 $this->history[$this->first]['path']=$path; return; }else{ $this->first=$this->nextNum($this->first);//首位前移 $this->history[$this->first]['path']=$path; } if ($this->first==$this->last) {//起始位置与终止位置相遇 $this->last=$this->nextNum($this->last);//末尾位置前移。 } } function goback(){//返回从first后退N步的地址。 $this->back+=1; //最大后退步数为起点到终点之差(顺时针之差) $mins=$this->minus($this->first,$this->last); if ($this->back >= $mins) {//退到最后点 $this->back=$mins; } $pos=$this->prevNum($this->first,$this->back); return $this->history[$pos]['path']; } function gonext(){//从first后退N步的地方前进一步。 $this->back-=1; if ($this->backback=0; } return $this->history[$this->prevNum($this->first,$this->back)]['path']; } function goedit($path){//后退到某个点,没有前进而是修改。则firs值为最后的值。 $pos=$this->minus($this->first,$this->back); $pos=$this->nextNum($pos);//下一个 $this->history[$pos]['path']=$path; $this->first=$pos; $this->back=0; } //是否可以后退 function isback(){ if ($this->back minus($this->first,$this->last)) { return ture; } return false; } //是否可以前进 function isnext(){ if ($this->back>0) { return true; } return false; } } //测试代码。 $hi=new history(array(),6);//传入空数组,则初始化数组构造。 for ($i=0; $i add('s'.$i); } pr($hi->goback()); pr($hi->goback()); pr($hi->goback()); pr($hi->gonext()); pr($hi->gonext()); pr($hi->gonext()); pr($hi->gonext()); $hi->add('asdfasdf'); $hi->add('asdfasdf2'); pr($hi->getHistory()); $ss=new history($hi->getHistory());//直接用数组构造。 $ss->add('asdfasdf'); $ss->goback(); pr($ss->getHistory()); ?>
debug.php文件:

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
