2016-03-21 16 views
1

Bir aile ağacı işlevi üzerinde çalışıyorum ve her nesil için for() ifadesini yinelemem gerekiyor.Php'de hangi işlev birden çok iç içe döngüyü değiştirebilir?

önceden nesil numarasını bilmiyorsanız ve tüm for() ifadeleri hemen hemen aynı komut dosyası içerirler ...

$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*/ 
} 

yapmak için bir kolay yolu için böyle bir iki boyutlu var mı? İhtiyacım olan for()'a sahip olmanın bir yolu var mı?

+7

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

cevap

1

Sonunda/kullanılan user2182349 önerisi uyarlanmış:

$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 
} 

Bu gerçek kod ilk derin for() deyimi çalıştırır, genişliğini hesaplamadan önce tam olarak tüm çocukların genişliğini bilmek bu durumda izin ebeveyn. Ancak, siparişi herhangi bir kodu for()'dan önce girerek değiştirebilirsiniz.

İlgili konular