이 기사는 재귀 조건 하에서 그리고 재귀를 사용하지 않고 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!