PHP에서 무제한 분류를 구현하는 두 가지 방법
이 기사는 재귀 조건 하에서 그리고 재귀를 사용하지 않고 PHP에서 무한 분류를 구현하는 방법을 소개합니다. PHP무한 분류는 향후 개발 과정에서 매우 일반적입니다. 자주 사용하므로 마스터해야 합니다. PHP에서 무제한 분류를 달성하는 방법을 모르는 친구는 이 기사를 참조하세요.
PHP를 오랫동안 사용하면서 백그라운드 관리 시스템을 발견했습니다. 필수적인 응용 모듈은 분류입니다. 일반적으로 열은 무한 수준으로 만들어져야 하며, 이는 이론적으로 각 열에 하위 열을 추가할 수 있음을 의미합니다. 내 생각에는 이 상황을 처리하는 것이 전체적으로 그리 복잡하지는 않습니다. 유일하게 상대적으로 어려운 점은 무한 열에 대한 쿼리입니다.
이러한 상황에 대해 간단히 소개하겠습니다. 이런 종류의 무한 열을 쿼리하는 방법에는 일반적으로 두 가지가 있는데, 그 중 하나는 스택 메커니즘을 사용하는 것이고, 다른 하나는 재귀 함수 방식을 사용하는 것입니다(물론). 재귀 함수 구현 메커니즘도 스택의 도움으로 구현됩니다. 아래에서는 이 두 가지 방법을 별도로 소개하겠습니다.
재귀 함수를 구현하는 방법
위에서 언급했듯이 재귀 함수도 스택 메커니즘의 도움으로 구현되지만 기본 스택 처리는 애플리케이션 로직의 구현에만 관심이 있는 프로그래머에게 투명합니다. . 따라서 위의 문제를 처리하기 위해 재귀를 사용하는 것이 이해하기 쉽고 코드가 비교적 간결합니다.
재귀함수를 사용하고 있기 때문에 이름에서 알 수 있듯이 맞춤 함수를 사용해야 합니다. 먼저 구현 아이디어에 대해 간략히 말씀드리고, 구체적인 내용은 코드에 반영하도록 하겠습니다.
각 레이어 함수의 주요 작업은 상위 ID가 현재 ID인 열을 찾는 것입니다. 찾은 후 자체 함수를 다시 호출하고 찾은 열의 ID를 다음 레이어의 상위 ID로 사용합니다.
흐름도는 다음과 같습니다
그림 1
위의 설명이 이해가 되실지 모르겠지만 상관없으니 직접 코드를 살펴보겠습니다
<?php $channels = array( array('id'=>1,'name'=>"衣服",'parId'=>0), array('id'=>2,'name'=>"书籍",'parId'=>0), array('id'=>3,'name'=>"T恤",'parId'=>1), array('id'=>4,'name'=>"裤子",'parId'=>1), array('id'=>5,'name'=>"鞋子",'parId'=>1), array('id'=>6,'name'=>"皮鞋",'parId'=>5), array('id'=>7,'name'=>"运动鞋",'parId'=>5), array('id'=>8,'name'=>"耐克",'parId'=>7), array('id'=>9,'name'=>"耐克",'parId'=>3), array('id'=>10,'name'=>"鸿星尔克",'parId'=>7), array('id'=>11,'name'=>"小说",'parId'=>2), array('id'=>12,'name'=>"科幻小说",'parId'=>11), array('id'=>13,'name'=>"古典名著",'parId'=>11), array('id'=>14,'name'=>"文学",'parId'=>2), array('id'=>15,'name'=>"四书五经",'parId'=>14) ); $html = array(); /** * 递归查找父id为$parid的结点 * @param array $html 按照父-》子的结构存放查找出来的结点 * @param int $parid 指定的父id * @param array $channels 数据数组 * @param int $dep 遍历的深度,初始化为1 */ function getChild(&$html,$parid,$channels,$dep){ /* * 遍历数据,查找parId为参数$parid指定的id */ for($i = 0;$i<count($channels);$i++){ if($channels[$i]['parId'] == $parid){ $html[] = array('id'=>$channels[$i]['id'],'name'=>$channels[$i]['name'],'dep'=>$dep); getChild($html,$channels[$i]['id'],$channels,$dep+1); } } } getChild($html,0,$channels,1); ?>
이것이 핵심입니다 무한 열 쿼리를 재귀적으로 구현하기 위한 코드와 그림을 결합하면 구현 프로세스를 보다 명확하게 이해할 수 있습니다.
비재귀, 즉 스택 메커니즘을 사용하여 무한 수준 열 쿼리를 구현합니다
위에서 재귀를 사용하여 무한 수준 열 쿼리를 구현하는 방법을 간략하게 소개했습니다. -재귀적 방법. 재귀 함수를 사용하지 않지만 무한 컬럼의 구조 페이지를 고려하여 이 문제를 해결하려면 재귀 구현 메커니즘, 즉 스택 메커니즘을 참조할 필요가 있습니다.
제가 학교에 다닐 때 선생님께서 스택의 핵심 메커니즘은 실제로 선입, 후출이라는 네 단어에 불과하다고 말씀하셨습니다.
여기서는 스택의 메커니즘에 대해 많이 이야기하지 않지만 주로 스택을 사용하여 무제한 열 쿼리를 구현하는 방법에 대해 이야기하겠습니다.
1. 먼저 상단 열을 스택에 밀어넣습니다
2. 스택에서 상단 요소를 팝합니다
3. 팝된 요소를 배열에 저장하고 깊이를 표시합니다. 상위)
열 깊이에 1)을 추가합니다. 4. 팝된 요소를 상위 열로 사용하고 해당 하위 열을 검색합니다.
5. 발견된 하위 열을 스택에 푸시하고 반복합니다. 2단계
6. 스택이 비어 있다고 판단되면 프로세스가 종료됩니다.
위 단계를 번역하면 이 단계를 PHP 코드로 변환할 수 있습니다.
위 내용은 비재귀적인 방식으로 구현되었습니다.
다운로드 코드:
https://github.com/onmpw/phpApp위의 두 가지 방법은 구현 형식이 다르지만 무한 열의 구조를 고려하면 나름의 장단점이 있습니다. , 두 가지 구현 메커니즘은 모두 동일합니다. 모두 스택을 사용하여 구현됩니다. 실제 상황에서는 실제 상황의 필요에 따라 이를 구현할 수 있는 방법을 선택해야 합니다.
추천 기사:
PHP에서 무제한 분류 트리를 구현하는 방법은 무엇인가요? 이번 글에서는 주로 PHP에서 무제한 분류 트리 목록을 간단하게 구현하는 방법을 소개합니다...
PHP 무제한 분류의 개발 과정 및 예시 분석우리는 일상 업무에서 수많은 분류를 자주 접하게 됩니다. 많은 오픈 소스 소프트웨어는 재귀 알고리즘을 사용합니다...
위 내용은 PHP에서 무제한 분류를 구현하는 두 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는
