大师! 首先,我花了半天时间googlin'n'stackoverflowing但无法找到解决方案。这是我第一次使用递归。希望有人可以提供帮助。
我有一个MySQL表,这是一种referal系统:
Table 'users'
ID SPONSORID
---------
1 2
2 1
3 1
4 1
... ...
要记住以下几点:
任务是以递归方式构建单个“团队”的树,例如:
User 1
User 2
User 1
User 5
...
....
User 3
User 295
User 356
....
User 4
依旧......
这是我正在尝试做的事情:
$team = Array();
function build_team( $userID, $team ){
if ( !in_array($userID, $team ) :
// get 1st level of referals
// returns associative array ('id', 'login', 'sponsorid')
$referals = get_user_referals( $userID );
for ( $i=0; $i<count($referals); $i++ ) :
$team[] = $referals[$i];
build_team( $referals[$i]['id'] );
endfor;
endif;
}
并且还尝试将IF放在FOR块中,但它仍然处于无限循环中。据我所知,当没有深度级别但是我无法理解如何计算/确定它时,我需要一个条件来退出递归。有什么建议吗?
答案 0 :(得分:2)
保留用户ID,他们已经在某处建立了#34;正如你自己说的那样 - &#34;用户1和2是对方的赞助/反对。&#34;,所以有你的无限循环。
像
这样的东西if (!in_array($userId, $already_looped_users){
//continue loop...
}
添加一些代码:
$team = Array();
function build_team( $userID, $team ){
if ( !in_array($userID, $team ) :
// get 1st level of referals
// returns associative array ('id', 'login', 'sponsorid')
$referals = get_user_referals( $userID );
if (count($referals) > 0){ //added this line
for ( $i=0; $i<count($referals); $i++ ) :
$team[] = $referals[$i];
$team[$referals[$i] = build_team( $referals[$i]['id'], $team ); // i've edited this line
endfor;
return $team;
}
endif;
}