2013-09-03 1 views
0

저는 MLM (다중 레벨 마케팅) 응용 프로그램을 작성했습니다. 다음은 초기 단계에서 작성하고 올바르게 작동하는 재귀 함수의 코드 스 니펫 (전체 코드 아님)입니다. 하지만 이제는 MLM 트리가 너무 깊어서 재귀 함수가 멈 춥니 다. 최대 중첩 수준을 초과했습니다. 중첩 기능 호출 수준을 몇 번 늘렸으나 올바른 솔루션이 아니라는 것을 알고 나면 더 많은 기능 호출 수준을 늘리고 싶지 않습니다.재귀 함수 대신

이 사람이 저에 대한 대체 코드를 (반복 될 수있다) 제안 할 수 있습니까?

<?php 
function findallpairs($username, $totalusers= 0) 
{ 
$sql = "select username,package_id from tbl_user where 
    parent_id = '".$username."'  order by username"; 
$result = mysql_query($sql); 
if(mysql_num_rows($result) > 0) 
{  
    while($row = mysql_fetch_array($result)) 
    {   
     $username = $row["username"]; 
     $totalusers++; 

     $arrtmp = findallpairs($username, $totalusers); 
     $totalusers = $arrtmp["totalusers"]; 
    } 
} 

$arrpoints["totalusers"] = $totalusers; 

return $arrpoints; 
} 
?> 

참고 : 원본 코드가 너무 크지 만 여기서 논리의 중요한 부분을 붙여 넣었습니다. 나는이에 대한 대체 솔루션을 찾을 경우

그것은 나에게 큰 도움이 될 것입니다.

미리 감사드립니다.

답변

0

너는 얼마나 깊게 지내십니까?

하루가 SQL 데이터베이스 내에 다차원 트리를 만듭니다. 나무는 재귀 구조이며 재귀 코드는 자연스럽게 적합합니다.

당신은 내가 준 memiozation를 호출하고있는 무슨 수 사용에 사용 될 수 있습니다. 당신은 DB 구조에 나와있는 자녀가있는 경우

이 용이해야한다. childrin이없는 모든 사용자에 대해 결과를 가져오고 키가 사용자 ID 및 값 1 인 해시 또는 트리에 값을 저장합니다. 그런 다음 각 사용자 (또는 기억 된 항목의 부모)에게 대량 반복하고, 값들을 모든 자식들에 대해 기억하고, 그것들을 함께 더하고 그 값을 memoioze합니다. 루트 (부모를 가지지 않는 사용자)

를 찾을 때까지 당신이 가능성이 대단히 비효율적 아이들의 기록이없는 경우 반복을 반복합니다.

+0

감사합니다. 그것은 나를 위해 일했다 :) – Vivek