[PHP] Referrals eines Users ermitteln

Dieses Thema im Forum "Webentwicklung" wurde erstellt von hell18, 15. April 2008 .

Schlagworte:
  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  ) >  ){
                            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%">&nbsp;<b>User ID</b></td>
        <td width="60%">&nbsp;<b>Username</b></td>
        <td width="15%">&nbsp;<b>Referrals Ebene 1</b></td>
        <td width="15%">&nbsp;<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%">&nbsp;<?php  echo  $user [ 0 ];  ?></td>
              <td width="60%">&nbsp;<?php  echo  $user [ 1 ];  ?></td>
              <td width="15%">&nbsp;<?php  echo empty(  $referrals [ "level1" ][ 0 ] ) ?  '0'  $referrals [ "level1" ][ 0 ];  ?></td>
              <td width="15%">&nbsp;<?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
     
  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
     
  3. 17. April 2008
    AW: Referrals eines Users ermitteln

    Sorry kann ich mir aber jetzt grade nix drunter vorstellen ...
     
  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(
            
    => array(  // 1 = ID
                
    'Peter' ,   // Name
                
    // geworben von, 0 = keinem
            
    ),
            
    => array(
                
    'Dieter' ,
                
    1
            
    ),
            
    => array(
                
    'Peter' ,
                
    2
            
    ),
            
    => array(
                
    'Hans' ,
                
    1
            
    ),
            
    => 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
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.