2016-03-21 11 views
1

Ich arbeite an einer Stammbaumfunktion, und ich muss eine for() Anweisung für jede Generation iterieren.Welche Funktion kann mehrere verschachtelte Schleifen in PHP ersetzen?

Ich weiß nicht, die Zahl der Generation im Voraus und alle for() Aussagen fast das gleiche Skript enthalten ...

$nb_parents_line1 = 1; 
for($i = 0 ; $i < $nb_parents_line1 ; $i++) { 

    $nb_parents_line2 = $nb_son[$i]; 
    for($i2 = 0 ; $i2 < $nb_parents_line2 ; $i2++) {/*for each son of each parent*/ 

     $nb_parents_line3 = ; 
     for($i3 = 0 ; $i3 < $nb_parents_line3 ; $i3++) {/*for each son of each son of each parent*/ 

      $nb_parents_line4 = ; 
      for($i4 = 0 ; $i4 < $nb_parents_line4 ; $i4++) {/*and so on...*/ 

      } 
      /*center*/ 
     } 
    /*code for center*/ 
    } 
/*code for center*/ 
} 

Gibt es eine einfachste Weg, ein solches zweidimensionales zu tun? Gibt es eine Möglichkeit, genau wie for() wie ich brauche?

+7

Rekursion - http://www.elated.com/articles/php-recursive-functions/ – user2182349

Antwort

1

Schließlich verwenden I/geeignet ist, den Vorschlag von user2182349:

$level_max = 4; 

function recursive_function($level) { 

    global $i, $nb_parents_line, $levelmax; 

    $tmp = $nb_parents_line[$level]; //The number of child per parents : the index represent the generation 

    //code to execute before going down a level 

    for($i[$level] = 0; $i[$level] < $tmp; $i[$level]++) { 

     if($level < $level_max){ 

      recursive_function($level +1); //level +1 
     } 

    } 

    //code to exectute after the script had gone down all levels and reup levels one by one 
} 

Dieser eigentlichen Code wird die tiefste for() Anweisung zuerst ausgeführt werden, die in diesem Fall erlauben genau die Breite aller Kinder zu wissen, bevor Breite der Berechnung Elternteil. Aber Sie können die Reihenfolge ändern, indem Sie einen beliebigen Code vor die for() setzen.