찾다
백엔드 개발PHP 튜토리얼PHP는 양방향 순환 큐를 구현합니다 --- (기록 레코드의 앞으로 및 뒤로 기능 구현)

작업 이력 기록 기능 구현


  1. 실행 취소 및 실행 취소 기능과 유사한 기능입니다. (정방향 및 역방향 연산 구현)
  2. discuz 포럼에 로그인하면 게시물을 볼 수 있습니다. (지금까지 본 게시물과 게시물 조회 기록을 앞뒤로 이동할 수 있습니다.)
  3. Windows 탐색기 주소 표시줄의 앞으로 및 뒤로 기능과 논리는 동일합니다.


이러한 요구를 바탕으로 데이터 구조가 구현됩니다. 나는 일시적으로 역사 수업이라고 불리는 일반 수업을 썼습니다.
[원리는 시계와 비슷합니다. 객체를 인스턴스화할 때 길이가 N(필요에 따라 결정될 수 있음) 노드로 링을 구성할 수 있습니다.]
그런 다음 다양한 작업을 통합하세요. 앞으로, 뒤로, 삽입, 삽입 수정.

클래스는 배열을 구성할 수 있습니다. 또는 배열 매개변수를 전달하여 객체를 생성합니다. 각 작업이 끝나면 작업 후 배열을 얻을 수 있습니다. 완성된 데이터 는 필요에 따라 적절한 방법으로 저장할 수 있습니다. 쿠키나 세션에 넣거나, 직렬화하거나, json 데이터로 변환하여 데이터베이스에 저장하거나, 파일로 담아두는 것입니다. 다음번 사용에도 편리합니다.

확장을 촉진하려면 더 많은 데이터를 저장하세요. 특히 각 데이터 조각은 배열 레코드이기도 합니다.
예를 들어 필요에 따라 확장합니다: array('path'=>'D:/www/','sss'=>value)

---------- -------------


그런데 제가 작성한 변수 디버깅용 파일을 올려 놓았습니다.

  1. pr()은 출력 변수의 형식을 지정하고 강조 표시할 수 있습니다. pr($arr),pr($arr,1)은 출력 후 종료됩니다.
  2. debug_out()은 여러 변수를 출력하는 데 사용됩니다. 기본값은 종료하는 것입니다.
  3. debug_out($_GET,$_SERVER,$_POST,$arr) ;
  1. include 'debug.php';
  2. /**
  3. * 히스토리 연산 클래스
  4. * 배열을 전달하거나 구성합니다. 형식:
  5. array(
  6. 'history_num'=>20, //총 대기열 노드 수
  7. 'first'=>0, //시작 위치, 0부터 시작. 배열 인덱스 값
  8. 'last'=>0, //끝 위치는 0부터 시작합니다.
  9. 'back'=>0, //첫 번째 위치에서 몇 걸음 뒤로 이동했는지 =>array( //배열, 작업 대기열을 저장합니다.
  10. array('path'=>'D:/'),
  11. array('path'=>'D:/www/') ,
  12. array('path'=>'E:/'),
  13. array('path'=>'/home/')
  14. ……
  15. )
  16. )
  17. */
  18. 클래스 역사{
  19. var $history_num;
  20. var $first;
  21. var $last;
  22. var $back;
  23. var $history=array();
  24. 함수 __construct( $array=array(),$num=12){
  25. if (!$array) {//배열이 비어 있습니다.
  26. $history=array();
  27. for ($i=0; $i array_push($history,array('path'=>'') );
  28. }
  29. $array=array(
  30. 'history_num'=>$num,
  31. 'first'=>0,//시작 위치
  32. 'last'=> ; 0,//위치 끝
  33. 'back'=>0,
  34. 'history'=>$history
  35. );
  36. }
  37. $this->history_num=$array [ 'history_num'];
  38. $this->first=$array['first'];
  39. $this->last=$array['last'];
  40. $this-> =$array['back'];
  41. $this->history=$array['history']
  42. }
  43. function nextNum($i,$n=1){ / 루프 아래의 /N 값. 클럭 루프와 유사합니다.
  44. return ($i $n)history_num ? ($i $n):($i $n-$this->history_num);
  45. }
  46. 함수 prevNum( $i,$n=1){//루프의 마지막 값 i입니다. N 위치로 돌아갑니다.
  47. return ($i-$n)>=0 ? ($i-$n) : ($i-$n $this->history_num)
  48. }
  49. 함수 마이너스 ($i,$j){//두 시계 방향 지점의 유일한 차이점은 i-j
  50. return ($i > $j) ? ($i - $j):($i-$j $this-> ; History_num);
  51. }
  52. 함수 getHistory(){//저장 또는 직렬화 작업에 사용되는 배열을 반환합니다.
  53. return array(
  54. 'history_num'=> $this->history_num,
  55. 'first' => $this->first,
  56. 'last' => $this- >마지막,
  57. '뒤로' => $this->뒤로,
  58. '역사' => $this->history
  59. );
  60. }
  61. function add($path){
  62. if ($this->back!=0) {//back 작업 기록이 있으면 삽입합니다.
  63. $this->goedit($path);
  64. return;
  65. }
  66. if ($this->history[0]['path']=='') {// 방금 생성되었으므로 추가할 필요가 없습니다.
  67. $this->history[$this->first]['path']=$path;
  68. return;
  69. }else{
  70. $this->first=$this->nextNum($this->first);//첫 번째 위치를 앞으로 이동
  71. $this->history[$this-> first]['path'] =$path;
  72. }
  73. if ($this->first==$this->last) {//시작 위치와 끝 위치가 만납니다
  74. $ this->last=$this ->nextNum($this->last);//끝 위치를 앞으로 이동합니다.
  75. }
  76. }
  77. function goback(){//처음부터 N단계 전의 주소를 반환합니다.
  78. $this->back =1;
  79. //최대 뒤로 이동할 수 있는 단계는 시작점과 끝점의 차이(시계 방향 차이)입니다.
  80. $mins=$this->minus ($this-> ;first,$this->last);
  81. if ($this->back >= $mins) {//마지막 지점으로 돌아가기
  82. $this->back =$mins;
  83. }
  84. $pos=$this->prevNum($this->first,$this->back);
  85. return $this->history[ $pos]['path '];
  86. }
  87. function gonext(){//N이 처음에서 뒤로 물러난 곳에서 한 걸음 앞으로 나아갑니다.
  88. $this->back-=1;
  89. if ($this->back $this->back=0;
  90. }
  91. return $this->history[$this->prevNum($this->first,$this->back)]['path'];
  92. }
  93. 함수 goedit( $ path){//앞으로가 아니라 수정된 특정 지점으로 돌아갑니다.전나무 값은 마지막 값입니다.
  94. $pos=$this->minus($this->first,$this->back);
  95. $pos=$this->nextNum($pos);//다음
  96. $this->history[$pos]['path']=$path;
  97. $this->first=$pos;
  98. $this->back=0;
  99. }
  100. //돌아갈 수 있나요?
  101. function isback(){
  102. if ($this->back minus($this->first,$this- > ;last)) {
  103. return ture;
  104. }
  105. return false;
  106. }
  107. //앞으로 나아갈 수 있나요
  108. function isnext(){
  109. if ($this -> ;back>0) {
  110. return true;
  111. }
  112. return false;
  113. }
  114. }
  115. //테스트 코드.
  116. $hi=new History(array(),6);//빈 배열을 전달하여 배열 구성을 초기화합니다.
  117. for ($i=0; $i $hi->add('s'.$i)
  118. }
  119. pr($hi- >goback());
  120. pr($hi->goback());
  121. pr($hi->goback());
  122. pr($hi-> goneext());
  123. pr($hi->gonext());
  124. pr($hi->gonext());
  125. pr($hi->gonext());
  126. $hi->add('asdfasdf');
  127. $hi->add('asdfasdf2');
  128. pr($hi->getHistory());
  129. $ss=new History($hi->getHistory());//배열로 직접 구성됩니다.
  130. $ss->add('asdfasdf');
  131. $ss->goback();
  132. pr($ss->getHistory());
  133. ?>
코드 복사
  1. /**
  2. * 변수 이름 가져오기
  3. * 예 hello="123" ss 문자열 가져오기
  4. */
  5. function get_var_name(&$aVar){
  6. foreach($GLOBALS를 $로 표시 key=>$var)
  7. {
  8. if($aVar==$GLOBALS[$key] && $key!="argc"){
  9. return $key;
  10. }
  11. }
  12. }
  13. /**
  14. * 형식화된 출력 변수 또는 객체
  15. * @param Mixed $var
  16. * @param boolean $exit
  17. */
  18. function pr($var,$exit = false){
  19. ob_start();
  20. $style='
  21. pre#debug{margin:10px;font-size:13px;color:#222;font-family:Consolas ;line-height:1.2em;배경:#f6f6f6;border-left:5px solid #444 ;padding:5px;width:95%;word-break:break-all;}
  22. pre#debug b{font-weight:400;}
  23. #debug #debug_str{color:#E75B22;}
  24. #debug #debug_keywords{font-weight:800;color:00f;}
  25. #debug #debug_tag1{color:#22f;}
  26. #debug #debug_tag2{color:#f33;font-weight:800; }
  27. #debug #debug_var{color:#33f;}
  28. #debug #debug_var_str{color:#f00;}
  29. #debug #debug_set{color:#0C9CAE;}';
  30. if (is_array($var)){
  31. print_r($var);
  32. }
  33. else if (is_object($var)){
  34. echo get_class($var)." 개체 ";
  35. }
  36. else if(is_resource($var)){
  37. echo (string)$var;
  38. }
  39. else{
  40. echo var_dump($var);
  41. }
  42. $out = ob_get_clean();//$out 변수에 대한 버퍼 출력
  43. $out=preg_replace('/"(.*)"/','"'.'\1'.'"',$out);//문자열 변수 강조 표시
  44. $out=preg_replace('/=>(.*)/' ,' =>'.''.'\1'.'',$out);//=>
  45. $out= 뒤의 값 강조 표시 preg_replace('/[(.*)]/','['.'\1'. ']',$out);//변수 강조
  46. $from = array(' ','(' ,')' ,'=>');
  47. $to = array(' ','(',') ','=>');
  48. $out=str_replace($from,$to,$out)
  49. $keywords=array('Array','int','string','class','object','null');//키워드 강조
  50. $keywords_to=$ 키워드;
  51. foreach ($keywords as $key=>$val)
  52. {
  53. $keywords_to[$key] = ''.$val.'< ;/b>';
  54. }
  55. $out=str_replace($keywords,$keywords_to,$out)
  56. echo $style.'
    <b id="debug_keywords"> '.get_var_name($var).'</b> = '.$out.'
    ';
  57. if ($exit) exit;//true인 경우 종료
  58. }
  59. /**
  60. * 디버그 출력 변수, 개체 값.
  61. * 임의 개수의 매개변수(모든 유형의 변수)
  62. * @return echo
  63. */
  64. function debug_out(){
  65. $avg_num = func_num_args();
  66. $avg_list= func_get_args();
  67. ob_start();
  68. for ($i=0; $i pr($avg_list[$i]);
  69. }
  70. $out=ob_get_clean() ;
  71. echo $out ;
  72. 종료;
  73. }
  74. ?>
코드 복사


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP의 목적 : 동적 웹 사이트 구축PHP의 목적 : 동적 웹 사이트 구축Apr 15, 2025 am 12:18 AM

PHP는 동적 웹 사이트를 구축하는 데 사용되며 해당 핵심 기능에는 다음이 포함됩니다. 1. 데이터베이스와 연결하여 동적 컨텐츠를 생성하고 웹 페이지를 실시간으로 생성합니다. 2. 사용자 상호 작용 및 양식 제출을 처리하고 입력을 확인하고 작업에 응답합니다. 3. 개인화 된 경험을 제공하기 위해 세션 및 사용자 인증을 관리합니다. 4. 성능을 최적화하고 모범 사례를 따라 웹 사이트 효율성 및 보안을 개선하십시오.

PHP : 데이터베이스 및 서버 측 로직 처리PHP : 데이터베이스 및 서버 측 로직 처리Apr 15, 2025 am 12:15 AM

PHP는 MySQLI 및 PDO 확장 기능을 사용하여 데이터베이스 작업 및 서버 측 로직 프로세싱에서 상호 작용하고 세션 관리와 같은 기능을 통해 서버 측로 로직을 처리합니다. 1) MySQLI 또는 PDO를 사용하여 데이터베이스에 연결하고 SQL 쿼리를 실행하십시오. 2) 세션 관리 및 기타 기능을 통해 HTTP 요청 및 사용자 상태를 처리합니다. 3) 트랜잭션을 사용하여 데이터베이스 작업의 원자력을 보장하십시오. 4) SQL 주입 방지, 디버깅을 위해 예외 처리 및 폐쇄 연결을 사용하십시오. 5) 인덱싱 및 캐시를 통해 성능을 최적화하고, 읽을 수있는 코드를 작성하고, 오류 처리를 수행하십시오.

PHP에서 SQL 주입을 어떻게 방지합니까? (준비된 진술, pdo)PHP에서 SQL 주입을 어떻게 방지합니까? (준비된 진술, pdo)Apr 15, 2025 am 12:15 AM

PHP에서 전처리 문과 PDO를 사용하면 SQL 주입 공격을 효과적으로 방지 할 수 있습니다. 1) PDO를 사용하여 데이터베이스에 연결하고 오류 모드를 설정하십시오. 2) 준비 방법을 통해 전처리 명세서를 작성하고 자리 표시자를 사용하여 데이터를 전달하고 방법을 실행하십시오. 3) 쿼리 결과를 처리하고 코드의 보안 및 성능을 보장합니다.

PHP 및 Python : 코드 예제 및 비교PHP 및 Python : 코드 예제 및 비교Apr 15, 2025 am 12:07 AM

PHP와 Python은 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구와 개인 선호도에 달려 있습니다. 1.PHP는 대규모 웹 애플리케이션의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 데이터 과학 및 기계 학습 분야를 지배합니다.

PHP 실행 : 실제 예제 및 응용 프로그램PHP 실행 : 실제 예제 및 응용 프로그램Apr 14, 2025 am 12:19 AM

PHP는 전자 상거래, 컨텐츠 관리 시스템 및 API 개발에 널리 사용됩니다. 1) 전자 상거래 : 쇼핑 카트 기능 및 지불 처리에 사용됩니다. 2) 컨텐츠 관리 시스템 : 동적 컨텐츠 생성 및 사용자 관리에 사용됩니다. 3) API 개발 : 편안한 API 개발 및 API 보안에 사용됩니다. 성능 최적화 및 모범 사례를 통해 PHP 애플리케이션의 효율성과 유지 보수 성이 향상됩니다.

PHP : 대화식 웹 컨텐츠를 쉽게 만들 수 있습니다PHP : 대화식 웹 컨텐츠를 쉽게 만들 수 있습니다Apr 14, 2025 am 12:15 AM

PHP를 사용하면 대화식 웹 컨텐츠를 쉽게 만들 수 있습니다. 1) HTML을 포함하여 컨텐츠를 동적으로 생성하고 사용자 입력 또는 데이터베이스 데이터를 기반으로 실시간으로 표시합니다. 2) 프로세스 양식 제출 및 동적 출력을 생성하여 htmlspecialchars를 사용하여 XSS를 방지합니다. 3) MySQL을 사용하여 사용자 등록 시스템을 작성하고 Password_Hash 및 전처리 명세서를 사용하여 보안을 향상시킵니다. 이러한 기술을 마스터하면 웹 개발의 효율성이 향상됩니다.

PHP 및 Python : 두 가지 인기있는 프로그래밍 언어를 비교합니다PHP 및 Python : 두 가지 인기있는 프로그래밍 언어를 비교합니다Apr 14, 2025 am 12:13 AM

PHP와 Python은 각각 고유 한 장점이 있으며 프로젝트 요구 사항에 따라 선택합니다. 1.PHP는 웹 개발, 특히 웹 사이트의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 간결한 구문을 가진 데이터 과학, 기계 학습 및 인공 지능에 적합하며 초보자에게 적합합니다.

PHP의 지속적인 관련성 : 여전히 살아 있습니까?PHP의 지속적인 관련성 : 여전히 살아 있습니까?Apr 14, 2025 am 12:12 AM

PHP는 여전히 역동적이며 현대 프로그래밍 분야에서 여전히 중요한 위치를 차지하고 있습니다. 1) PHP의 단순성과 강력한 커뮤니티 지원으로 인해 웹 개발에 널리 사용됩니다. 2) 유연성과 안정성은 웹 양식, 데이터베이스 작업 및 파일 처리를 처리하는 데 탁월합니다. 3) PHP는 지속적으로 발전하고 최적화하며 초보자 및 숙련 된 개발자에게 적합합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구