나는 나의 DB에서 부모의 모든 자식의 ID를 얻는 함수를 가지고있다. 그래서 ID 7을 찾으면 5, 6, 10으로 배열을 반환 할 수 있습니다. 그 때 내가하고 싶은 것은 반환 된 ID의 자식을 반복적으로 찾아 아이들의 최종 깊이까지 찾는 것입니다.PHP : 재귀 적으로 부모의 자식을 얻는다.
이 작업을 수행하는 함수를 작성하려고했지만 재귀에 대해 혼란스러워지고 있습니다.
function getChildren($parent_id) {
$tree = Array();
$tree_string;
if (!empty($parent_id)) {
// getOneLevel() returns a one-dimentional array of child ids
$tree = $this->getOneLevel($parent_id);
foreach ($tree as $key => $val) {
$ids = $this->getChildren($val);
array_push($tree, $ids);
//$tree[] = $this->getChildren($val);
$tree_string .= implode(',', $tree);
}
return $tree_string;
} else {
return $tree;
}
}//end getChildren()
함수가 실행 된 후에 발견 된 모든 자식 ID의 1 차원 배열을 반환하고 싶습니다.
인접 목록 모델을 사용하면 부모 업데이트/이동이 용이합니까? –
아니요, ALM 테이블을 업데이트하는 데는 몇 가지 쿼리가 필요합니다. 약 6 ~ 귀하의 쿼리를 얼마나 잘 최적화 할 수 있습니다. 선택시 혜택은 모두 이루어집니다. 그런 다음 깊이, 어린이, 부모 등을 얻기 위해 4 개의 쿼리를 선택하는 대신 하나의 쿼리 만 수행하면됩니다. 따라서 삽입 및 업데이트 이상의 항목을 선택하면 ALM imho를 사용해야합니다. – Layke
그 반대편에 있지 않습니까? 중첩 된 세트를 사용하면 각 노드와 연관된 왼쪽 값을 선택하고 정렬하여 전체 트리 (또는 트리의 모든 하위 세트)를 쉽게 검색 할 수 있습니다. 자세한 내용은 http://dev.mysql.com/tech-resources/articles/hierarchical-data.html을 참조하십시오 (MySQL과 관련이 있지만 필요할 경우 다른 RDBMS로 쉽게 이식 할 수 있어야 함). – wimvds