>백엔드 개발 >PHP 문제 >PHP에서 무한 분류의 재귀 구현

PHP에서 무한 분류의 재귀 구현

王林
王林원래의
2023-05-07 11:32:072691검색

웹 개발에서 분류는 매우 일반적인 기능입니다. 그리고 무한 분류는 이름 그대로 무한 수준에 따라 분류하는 것입니다. 프런트엔드와 백엔드 간의 상호작용 프로세스에서 이러한 분류를 달성하려면 특정 방법을 사용해야 하며, PHP의 재귀가 그 중 하나입니다.

1. 재귀란 무엇입니까

재귀는 프로그램 실행 중에 자신을 호출하는 기술을 말합니다. 재귀를 통해 복잡한 문제를 간단한 문제로 단순화하여 문제를 더 잘 해결할 수 있습니다. PHP에서 재귀를 사용하려면 재귀의 두 가지 요소인 재귀 종료 조건과 재귀 표현식을 명확히 해야 합니다.

재귀 종료 조건은 재귀가 종료되는 시점에 대한 판단 조건을 말하며, 일반적으로 특정 깊이, 상태에 도달하거나 특정 값을 갖는 것을 의미합니다. 재귀 과정 중에 종료 조건이 없으면 프로그램은 무한 루프에 빠지게 됩니다.

재귀 표현식은 재귀 프로세스 중에 재귀 작업을 계속 수행하는 것을 의미합니다. 일반적으로 재귀 표현식은 함수 자체를 호출하여 재귀 함수 내에서 구현됩니다.

2. 재귀를 사용하여 무한 분류를 구현하는 방법

재귀를 사용하여 무한 분류를 구현할 수 있습니다. 구체적으로 특정 수준의 분류 목록을 나타내는 배열인 매개변수를 받는 재귀 함수를 정의할 수 있습니다. 함수 내부에서 재귀 연산이 수행되며, 각 범주가 차례로 순회됩니다. 이 범주에 하위 범주가 있으면 하위 범주도 재귀 함수를 통해 순회됩니다. 순회가 끝나면 전체 범주형 배열이 반환됩니다.

구체적인 구현은 다음과 같습니다.

function infiniteCategory($data, $pid = 0, $level = 0)
{
    static $result = array();
    foreach ($data as $key => $value) {
        if ($value['parent_id'] == $pid) {
            $value['level'] = $level;
            $result[] = $value;
            infiniteCategory($data, $value['id'], $level + 1);
        }
    }
    return $result;
}

분석은 다음과 같습니다.

(1) 이 함수는 세 개의 매개변수를 받습니다. 하나는 분류 목록 배열 $data이고, 하나는 상위 ID가 기본값이 0인 $pid입니다. 다른 하나는 기본값이 0 $level인 레벨입니다.

(2) 최종 분류 결과를 저장할 정적 변수를 정의합니다.

(3) foreach 루프를 통해 카테고리 목록을 탐색합니다. 카테고리의 parent_id가 $pid와 같으면 이 카테고리가 현재 수준에 속하고 최종 결과 배열 $result에 추가된다는 의미입니다.

(4) 그런 다음 재귀 함수를 호출하여 현재 범주의 ID를 $pid로 전달하고 $level+1을 다음 분류 수준의 수준으로 전달합니다.

(5) 순회가 완료된 후 결과 배열을 반환합니다.

이제 테스트해 보겠습니다.

$data = array(
    array('id' => 1, 'name' => '电脑', 'parent_id' => 0),
    array('id' => 2, 'name' => '手机', 'parent_id' => 0),
    array('id' => 3, 'name' => '笔记本', 'parent_id' => 1),
    array('id' => 4, 'name' => '台式机', 'parent_id' => 1),
    array('id' => 5, 'name' => '智能手机', 'parent_id' => 2),
    array('id' => 6, 'name' => '非智能手机', 'parent_id' => 2),
    array('id' => 7, 'name' => '微型笔记本', 'parent_id' => 3),
    array('id' => 8, 'name' => '超级台式机', 'parent_id' => 4),
    array('id' => 9, 'name' => '小型台式机', 'parent_id' => 4),
);

var_dump(infiniteCategory($data));

실행 결과는 다음과 같습니다.

array(9) {
  [0]=>
  array(4) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(6) "电脑"
    ["parent_id"]=>
    int(0)
    ["level"]=>
    int(0)
  }
  [1]=>
  array(4) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(9) "笔记本"
    ["parent_id"]=>
    int(1)
    ["level"]=>
    int(1)
  }
  [2]=>
  array(4) {
    ["id"]=>
    int(7)
    ["name"]=>
    string(15) "微型笔记本"
    ["parent_id"]=>
    int(3)
    ["level"]=>
    int(2)
  }
  [3]=>
  array(4) {
    ["id"]=>
    int(4)
    ["name"]=>
    string(9) "台式机"
    ["parent_id"]=>
    int(1)
    ["level"]=>
    int(1)
  }
  [4]=>
  array(4) {
    ["id"]=>
    int(9)
    ["name"]=>
    string(18) "小型台式机"
    ["parent_id"]=>
    int(4)
    ["level"]=>
    int(2)
  }
  [5]=>
  array(4) {
    ["id"]=>
    int(8)
    ["name"]=>
    string(18) "超级台式机"
    ["parent_id"]=>
    int(4)
    ["level"]=>
    int(2)
  }
  [6]=>
  array(4) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(6) "手机"
    ["parent_id"]=>
    int(0)
    ["level"]=>
    int(0)
  }
  [7]=>
  array(4) {
    ["id"]=>
    int(5)
    ["name"]=>
    string(12) "智能手机"
    ["parent_id"]=>
    int(2)
    ["level"]=>
    int(1)
  }
  [8]=>
  array(4) {
    ["id"]=>
    int(6)
    ["name"]=>
    string(15) "非智能手机"
    ["parent_id"]=>
    int(2)
    ["level"]=>
    int(1)
  }
}

레벨 필드의 값에 따라 카테고리 목록이 성공적으로 Infinitus 카테고리로 변환된 것을 확인할 수 있습니다. 각 카테고리.

3. 요약

재귀를 통해 Infinitus 분류를 구현하는 방식을 사용하면 웹 개발 시 분류 기능을 빠르게 완성할 수 있으며 유연성도 높습니다. 재귀를 사용할 때는 종료 조건 설정에 주의해야 합니다. 그렇지 않으면 무한 루프에 빠질 수 있습니다.

위 내용은 PHP에서 무한 분류의 재귀 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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