나는 바이너리 mlm 시스템을 사용하는 사이트에서 작업 해왔다. 레벨을 재귀 적으로 정렬
그래서 나는 데이터베이스에 두 개의 테이블을 가지고, 사용자는 관계를 ANAD. 사용자에게는 ID 및 개인 데이터 열이 있습니다. 관계에는 ID, parentID, childID, pos의 4 개의 열이 있습니다. 여기서 pos는 왼쪽 또는 오른쪽 중 하나입니다.필자는 주어진 pid (parentID)의 모든 자식을 재귀 적으로 나열하는 함수를 성공적으로 작성했습니다. 그러나 수준 (표시 및 계산 목적) 정렬해야합니다. 이제
Array
(
[0] => Array
(
[id] => 2
[parentID] => 1
[pos] => l
)
[1] => Array
(
[id] => 4
[parentID] => 2
[pos] => l
)
[2] => Array
(
[id] => 8
[parentID] => 4
[pos] => l
)
[3] => Array
(
[id] => 5
[parentID] => 2
[pos] => p
)
[4] => Array
(
[id] => 3
[parentID] => 1
[pos] => p
)
[5] => Array
(
[id] => 6
[parentID] => 3
[pos] => l
)
[6] => Array
(
[id] => 7
[parentID] => 3
[pos] => p
)
)
내가라는 이름의 함수 get_levels이 이 다음과 같아야한다는 다차원 배열 반환 :
Array
(
[0] => Array
(
[0] => Array
(
[id] => 2
[parentID] => 1
[pos] => l
)
[1] => Array
(
[id] => 3
[parentID] => 1
[pos] => p
)
)
[1] => Array
(
[0] => Array
(
[id] => 4
[parentID] => 2
[pos] => l
)
[1] => Array
(
[id] => 5
[parentID] => 2
[pos] => p
)
[2] => Array
(
[id] => 6
[parentID] => 3
[pos] => l
)
[3] => Array
(
[id] => 7
[parentID] => 3
[pos] => p
)
)
ETC.
)
여기를
나는 사용자 ID의 아이의 배열 = 1이 기능 :
function get_levels($pid,$level, $level_id){
$children = children_array($pid,1);
if (sizeof($children) > 0):
foreach ($children as $child):
if ($child["parentID"] == $pid):
get_levels($child["id"], $level, $level_id+1);
$level[$level_id][] = $child;
endif;
endforeach;
endif;
return $level;
}
기능 chi ldren_array ($ pid, $ depth)는 children을 반환합니다. $ depth = 1은 바로 밑의 자식 (0 또는 1 또는 2)을 반환하고, $ depth = 0은 모든 자식을 반환합니다.
누구든지이 문제를 해결할 수 있습니까? 기능? 그러나 함수가 작동한다고 생각합니다. 재귀 적으로 배열을 사용하고 추가하는 방법을 모르겠습니다.
이 이진 트리 클래스를 발견했습니다 : http://www.phpclasses.org/browse/file/11713.html 데이터를 데이터베이스에 저장하는 가장 좋은 방법은 무엇입니까? ID | parentID | leftChildID | rightChildID? – Smaug
데이터의 경우 상위를 참조해야하며 다른 방법이없는 경우 해당 위치를 참조하십시오. 부모가없는 노드가 루트입니다. –