>백엔드 개발 >PHP 튜토리얼 >PHP 무제한 분류의 그림과 텍스트 코드 소개

PHP 무제한 분류의 그림과 텍스트 코드 소개

黄舟
黄舟원래의
2017-08-10 11:18:501318검색

무한 분류는 가장 높은 분류부터 시작하여 각 하위 범주를 자체적인 여러 하위 범주로 나눌 수 있다는 의미이며, 이를 무한 분류라고 합니다.

예를 들어 트리는 트렁크는 여러 가지로 갈라지고, 이 가지는 이론적으로 무한정 나눌 수 있는 다른 가지로 갈라집니다.

또 다른 예는 한 가족이 여러 명의 자녀를 가질 수 있다는 것입니다. 우리는 이러한 자녀를 첫 번째 수준 분류로 간주합니다. 그리고 이 아이들은 자신의 가족을 형성하게 됩니다. 각 가족이 둘 이상의 자녀를 가지면 이론적으로 무한하게 나눌 수 있습니다. 분류는 아래 그림과 같습니다.

PHP 무제한 분류의 그림과 텍스트 코드 소개 id와 pid라는 두 필드를 사용하여 상위 분류와 하위 집합 분류를 연결합니다. 예를 들어 특정 분류 수준의 조상과 자손을 찾을 수 있습니다. 상위 카테고리> 중국 가수> 팝 가수> 인기 남자 가수> 주걸륜

데이터를 생성하는 것만으로는 충분하지 않고, 이때 데이터를 표시해야 합니다. 이때 무한 분류의 재귀 알고리즘을 사용해야 합니다.

여기서 먼저 재귀가 무엇인지 설명합니다. 재귀는 반복 목적을 달성하기 위해 함수가 자신을 호출하는 프로그래밍 기술입니다. 그래서 질문은 왜 루프를 사용하지 않는가 하는 것입니다. 루프를 직접 사용하면 매개변수 문제를 잘 해결할 수 없습니다. 특히 복잡한 문제를 다룰 때 매개변수를 초기화할 때와 매개변수를 누적할 때 추가적인 사고가 필요합니다. 재귀만큼 명확하지 않습니다.

간단한 재귀 예제를 살펴보세요.

function test(&$b=0){
    $b++;    if($b<10){
        test($b);
    }    return $b;
}echo test();

재귀는 루프의 변형이므로 루프를 벗어나기 위한 조건이나 루프를 계속하기 위한 조건도 필요합니다. 여기서 &$b는 매개변수를 전달하는 방법으로, 참조 매개변수 자체를 참조합니다.

이전 분류로 돌아가서:

$host=&#39;127.0.0.1&#39;;
$db_user=&#39;root&#39;;
$db_pass=&#39;root&#39;;
$db_name=&#39;chenbk&#39;;
$timezone="Asia/Shanghai";
$link=mysqli_connect($host,$db_user,$db_pass,$db_name);
mysqli_query($link,"SET names UTF8");
header("Content-Type: text/html; charset=utf-8");

function tree($link,&$treeList=array(),$pid = 1,$count = 0) {  //$link为数据库连接,&$treeList为输出数组,因为需要累积结果,所以加上引用
    $count+=2;    //count为识别分级深度的标识
    $result = mysqli_query($link,"SELECT * FROM chen_category WHERE parentId={$pid}");
    while ($row=mysqli_fetch_assoc($result)) {
            $row[&#39;count&#39;] = $count;
            $row[&#39;name&#39;] = str_repeat(&#39; &#39;, $count).&#39;|-&#39;.$row[&#39;name&#39;];  //通过分级深度的标识,来给分类缩进效果
            $treeList[] = $row;   //把查询到的结果存储起来                         
            tree($link,$treeList,$row[&#39;id&#39;],$count);  //再次调用自身,这时的pid为上一条数据的id从而找到上一条数据的子分类;
    }
    return $treeList;    //输出结果
}

$values=tree($link);
echo &#39;<select name="parentId" id="">&#39;;

foreach ($values as $key => $value) {
    echo &#39;<option value="&#39;.$value[&#39;id&#39;].&#39;">&#39;.$value[&#39;name&#39;].&#39;</option>&#39;;
}

echo &#39;</select>&#39;;

이 함수의 실행 프로세스는 다음과 같습니다.

1.pid=0

2을 통해 가장 높은 카테고리를 찾아 계층적 깊이를 추가하고, 계층적 깊이를 통해 들여쓰기 효과를 추가한 후 이 데이터를 저장합니다.

3. 2.에서 찾은 데이터와 첫 번째 수준 범주의 ID를 이러한 방식으로 전달하여 자체 호출을 수행하면 해당 하위 범주를 찾을 때마다 최종적으로 찾을 수 있습니다.

최종 효과는 다음과 같습니다.

여기서 pid의 기본값을 1로 설정했기 때문에 가장 높은 분류는 표시되지 않습니다. , 그것은 Wilhe 루프에 있습니다. 함수 자체를 호출할 때 우리가 찾은 첫 번째 데이터는 2개 조각이었습니다. 하나는 중국 가수에 대한 것이고 다른 하나는 유럽 및 미국 가수에 대한 것입니다. 그러나 작동 중에 함수는 레이어로 호출됩니다. 다층 for 루프처럼 가장 안쪽 루프가 끝나면 외부 루프가 순서대로 완료됩니다. 따라서 중국 가수를 찾았을 때, 재귀 자체가 팝 가수를 찾았을 때부터 상위 레이어에서 팝 여성 가수를 처리하기 시작했습니다. 이 과정의 결과를 바탕으로 정렬이 완료됩니다. PHP 무제한 분류의 그림과 텍스트 코드 소개

위 내용은 PHP 무제한 분류의 그림과 텍스트 코드 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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