#1 15. April 2008 Referrals eines Users ermitteln Moin, ich habe mir mal überlegt wie ich am besten die Anzahl der User ermitteln kann welche von einem anderen User bzw Mitglied meiner Seite geworbenen wurden, da ganze erstmal auf 2 Ebenen ... Das ganze sollte normal über eine Datenbank laufen, ich hab zu Testzwecken aber erstmal nen schönes Array genommen ... PHP: # User anlegen $users [] = array( '1' , 'Hans' , '' ); $users [] = array( '2' , 'Manfred' , '1' ); $users [] = array( '3' , 'Uli' , '2' ); $users [] = array( '4' , 'Petra' , '2' ); Nachfolgend meine Idee für die Funktion die, die Referrals wahlweise der Ebene 1 oder 2 berechnet. PHP: # Funktion zum berechnen der Referrals eines Users function getReferrals ( $level , $userid , $level_ids = '' ){ global $users ; # Ebene 1 if( $level == '1' ){ $userid = (int) $userid ; # Referrals Ebene 1 ermitteln foreach( $users AS $user ){ if( $user [ 2 ] == $userid ){ $referrals ++; $ids [] = $user [ 0 ]; } } return array( $referrals , $ids ); } # Ebene 2 if( $level == '2' ){ $userid = (int) $userid ; # Referrals Ebene 1 ermitteln foreach( $users AS $user ){ if( count ( $level_ids ) > 0 ){ foreach( $level_ids AS $level_id ){ if( $user [ 2 ] == $level_id ){ $referrals ++; } } } } return $referrals ; } } Das ganze wird dann halt wie folgt ausgegeben ... PHP: <table width="75%" border="0" style="font-size:11px; font-family:Verdana, Arial, Helvetica, sans-serif;"> <tr> <td width="10%"> <b>User ID</b></td> <td width="60%"> <b>Username</b></td> <td width="15%"> <b>Referrals Ebene 1</b></td> <td width="15%"> <b>Referrals Ebene 2</b></td> </tr> <?php foreach( $users AS $user ){ $referrals [ "level1" ] = getReferrals ( '1' , $user [ 0 ] ); $referrals [ "level2" ] = getReferrals ( '2' , '' , $referrals [ "level1" ][ 1 ] ); ?> <tr> <td width="10%"> <?php echo $user [ 0 ]; ?></td> <td width="60%"> <?php echo $user [ 1 ]; ?></td> <td width="15%"> <?php echo empty( $referrals [ "level1" ][ 0 ] ) ? '0' : $referrals [ "level1" ][ 0 ]; ?></td> <td width="15%"> <?php echo empty( $referrals [ "level2" ] ) ? '0' : $referrals [ "level2" ]; ?></td> </tr> <?php } ?> </table> Die Ausgabe sieht so aus: ImageFire.net - Free Image Hosting Es geht jetzt auch nur drum ob das so am besten umgesetzt ist, sprich von der Last die durch dieses tolle Script erzeugt wird oder ob es überhaupt eine bessere Möglichkeit gibt. Und wie ist das wenn ich jetzt noch mit den Ebenen weiter gehen möchte sagen wir Ebene 3, 4 oder sogar bis Ebene 5 ... Vielen Dank schonmal + Multi-Zitat Zitieren
#2 17. April 2008 AW: Referrals eines Users ermitteln also wenn du noch tiefer gehen willst würde ich de 2 ifs die du jetzt hast auch einfach als loop machen dann kannst du bis in tiefste ebenen kommen + Multi-Zitat Zitieren
#3 17. April 2008 AW: Referrals eines Users ermitteln Sorry kann ich mir aber jetzt grade nix drunter vorstellen ... + Multi-Zitat Zitieren
#4 17. April 2008 AW: Referrals eines Users ermitteln Machs rekursiv, so zum Beispiel (nur die Ausgabe ist dann n bisschen suboptimal ): PHP: <? php $users = array( 1 => array( // 1 = ID 'Peter' , // Name 0 // geworben von, 0 = keinem ), 2 => array( 'Dieter' , 1 ), 3 => array( 'Peter' , 2 ), 4 => array( 'Hans' , 1 ), 5 => array( 'Person' , 4 ) ); function getRefs ( $uid , $users , $level = 1 ) { $geworben = array(); foreach( $users as $id => $data ) { if( $data [ 1 ] == $uid ) { $geworben [ $id ] = $id ; if( $level > $activelvl ) { array_push ( $geworben , getRefs ( $id , $users , $level - 1 )); } } } return $geworben ; } print '<pre>' ; $refs = getRefs ( 1 , $users , 2 ); print_r ( $refs ); print '</pre>' ; ?> Ausgabe wäre: Code: Array ( [2] => 2 [3] => Array ( [3] => 3 [4] => Array ( ) ) [4] => 4 [5] => Array ( [5] => 5 [6] => Array ( ) ) ) , bedeutet soviel wie: ID 2 ist ein direkter Ref, ID 2 hat noch einen Ref: ID 3. (siehe array unter ID 2) ID 3 hat keine Refs, array = leer ID 4 ist direkter Ref. ID 5 ist ref von ID 4 (siehe Array unter ID 4) ID 5 hat keine Refs => array leer + Multi-Zitat Zitieren