教祖!まず、半日かけて googlin'n'stackoverflowing を行いましたが、解決策が見つかりませんでした。再帰を扱うのはこれが初めてです。誰かが助けてくれることを願っています。
私はMySQLテーブルを持っています。これは一種の紹介システムです:
Table 'users'
ID SPONSORID
---------
1 2
2 1
3 1
4 1
... ...
注意すべき点がいくつかあります。
- ユーザー 1 と 2 は、お互いのスポンサー/紹介者です。
- 各ユーザーは無制限の数の紹介を持つことができます。
- 各ユーザーの紹介はスポンサーにもなり、紹介の数に制限はありません
- 深さは無制限です。
タスクは、次のような単一の「チーム」のツリーを再帰的に構築することです。
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ブロック内に入れようとしましたが、それでも無限ループに入ります。私が理解しているように、深さレベルがないときに再帰を終了する条件が必要ですが、それを計算/決定する方法がわかりません。助言がありますか?