MySQL 쿼리 결과와 함께 PHP를 사용하여 부모 아래의 모든 하위, 손자 등 노드 가져오기
원래 문제:
상위 노드와 연결된 모든 하위, 손자 및 후속 하위 노드를 검색하는 것은 계층적 데이터 구조로 작업할 때 일반적인 작업입니다. 이 문제는 데이터베이스 테이블이 데이터 구성을 위해 인접 목록 모델을 사용하는 시나리오에서 발생합니다.
재귀를 사용한 접근 방식:
이 문제를 해결하려면 재귀가 효과적인 것으로 입증되었습니다. 접근하다. 이 목표를 달성하기 위해 재귀를 사용하는 방법에 대한 자세한 설명은 다음과 같습니다.
1. 기본 함수 설정:
재귀 함수는 문제를 해결하기 위해 자신을 호출하는 함수이며 계층적 또는 중첩된 데이터 구조와 관련된 시나리오에서 자주 사용됩니다. 이 경우 기본 함수 이름은 fetch_recursive.
2입니다. 재귀 호출 기준 식별:
fetch_recursive 내에서 두 가지 기본 조건에 따라 재귀 호출이 이루어지는 시기가 결정됩니다.
3. 결과 배열 구성:
재귀 호출이 이루어질 때마다 함수는 현재 노드의 관련 데이터로 결과 배열을 채웁니다. 이 배열은 재귀 호출이 트리 구조를 통과함에 따라 반복적으로 증가합니다.
4. 재귀적으로 하위 노드 검색:
현재 노드에 하위 노드(자식 속성의 존재로 식별됨)가 있는 경우 해당 하위 노드를 검색하기 위해 또 다른 재귀 호출이 수행됩니다. 이 프로세스는 상위 노드의 모든 하위 노드가 캡처될 때까지 계속됩니다.
추가 기능:
1. 손자 및 하위 항목 처리:
fetch_recursive의 재귀적 특성으로 인해 계층 구조를 자동으로 탐색하고 하위 노드뿐만 아니라 손자 및 후속 하위 항목도 검색합니다.
2 . 결과 통합:
모든 재귀 호출이 완료된 후 함수는 지정된 상위 노드 아래의 모든 하위 노드를 포함하는 포괄적인 단일 배열을 반환합니다.
코드 구현:
function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array()) { foreach($src_arr as $row) { if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid) { $rowdata = array(); foreach($row as $k => $v) $rowdata[$k] = $v; $cats[] = $rowdata; if($row['parent_id'] == $currentid) $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true)); } } return $cats; }
사용법:
fetch_recursive 함수를 활용하려면 원래 데이터 배열(이 경우 $data)과 해당 노드의 ID를 전달하기만 하면 됩니다. 후손을 검색하고 싶습니다. 예를 들어, 노드 3 아래의 모든 하위, 손자 및 하위 노드를 검색하려면:
$list = fetch_recursive($data, 3);
이것은 $list 변수를 배열로 채웁니다. 관련된 모든 노드를 포함합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3