php 实现历史记录前进、后退等功能
内容摘要
这篇文章主要为大家详细介绍了php 实现历史记录前进、后退等功能,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记。经测试代码如下:
/**
对此感兴趣的朋友,看看idc笔记做的技术笔记。经测试代码如下:
/**
文章正文
这篇文章主要为大家详细介绍了php 实现历史记录前进、后退等功能,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记。经测试代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | <code class = "php" > /** * 历史记录操作类 * * @param * @author php教程 www.idcnote.com **/ include 'debug.php' ; /** * 传入或者构造一个数组。形如: array( 'history_num'=>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 < $num ; $i ++) { array_push ( $history , array ( 'path' => '' )); } $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 )< $this ->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 ->back<0) { //退到最后点 $this ->back=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 < $this ->minus( $this ->first, $this ->last)) { return ture; } return false; } //是否可以前进 function isnext(){ if ( $this ->back>0) { return true; } return false; } } //测试 /*** 代码来自php教程(www.idcnote.com) ***/ </code> |
注:关于php 实现历史记录前进、后退等功能的内容就先介绍到这里,更多相关文章的可以留意
代码注释