2017-09-16 1 views
0

Ich arbeite an einem Organigramm in PHP, und die Daten werden aus einer Datenbank abgerufen.Durchlaufen einer unbekannten Benutzerebene für ein Organigramm

Ein Beispiel des Organigramms sieht wie folgt aus, aber es hat eine unbekannte Anzahl von Ebenen:

Me

  1. Brandon

  2. David

    ein. Amanda

    b. Michelle

    c. Michael

  3. Robert

    ein. Kristen

    • Charles

    • Ashley

Traversal-Algorithmen Typ hat meine Schwäche oft, und ich brauche deine Hilfe. Ich habe mit vielen Variationen einer "Traverse" -Funktion experimentiert, die sich selbst nennen würde, aber ich bin noch nicht bei der richtigen Lösung angekommen.

Die temporäre Lösung, die ich gerade habe, ist nur drei Ebenen tief, und Sie können sehen, warum es nicht realistisch ist.

foreach($user->getChildren() as $child) { 
    echo $child->name; 

    foreach($child->getChildren() as $ch) { 
     echo $ch->name; 

     foreach($ch->getChildren() as $c) { 
      echo $c->name; 
      // ... more foreach statements 
     } 
    } 
} 

$user ist von class User und $user->getChildren() enthält eine Reihe von Benutzerobjekten, die $user als Mutter

Antwort

2

Ihre Querungsfunktion haben könnte ungefähr so ​​aussehen:

function traverse($users) 
{ 
    if(empty($users)) return; 

    foreach($users as $user) 
    { 
     echo $user->name; 
     traverse($user->getChildren()); 
    } 
} 

So haben Sie die Stop-Zustand, der if(empty($users)) return; oder if(count($users) == 0) return; sein kann, erhalten Sie die Idee, und die foreach Schleife auf jeder Ebene, whi ch gibt den Namen des Benutzers aus und ruft die Funktion für die untergeordneten Elemente des Benutzers erneut auf.

Sie würden es als traverse([$user]); bezeichnen, wobei $user der Benutzer ist, von dem Sie beginnen möchten.

Verwandte Themen