2016-05-17 58 views
1

組織完後面的PHP代碼後,我發現它們實際上又重複了一遍。如何避免在PHP中這樣重複的if語句?

有什麼辦法可以將代碼改進和擴展到無限級別嗎?

我們通常在技術術語中稱這個問題爲何?

$tags = [ 
    0 => ['0.1','0.2'], 
    1 => ['1.1','1.2'], 
    2 => ['2.1','2.2'] 
]; 
$num = count($tags); 
$level = 0; 

foreach ($tags[$level] as $tag) { 

    echo '<p style="text-indent:'.(2*$level).'em">'; 
    echo $tag; 
    echo '</p>'; 

    $level++; 
    if($level<=($num-1)){ 
     foreach ($tags[$level] as $tag) { 
      echo '<p style="text-indent:'.(2*$level).'em">'; 
      echo $tag; 
      echo '</p>'; 

       $level++ ; 
       if($level<=($num-1)){ 
        foreach ($tags[$level] as $tag) { 
         echo '<p style="text-indent:'.(2*$level).'em">'; 
         echo $tag; 
         echo '</p>'; 

         $level++ ; 
         if($level<=($num-1)){ 
          foreach ($tags[$level] as $tag) { 
          echo '<p style="text-indent:'.(2*$level).'em">'; 
          echo $tag; 
          echo '</p>'; 
          } 
         } 
         $level--; 
        } 
       } 
       $level--;    
     } 
    } 
    $level--; 
} 

這是代碼的結果。

0.1

        1.1

                2.1

                2.2

        1.2

                2.1

                2.2

1.1

        1.1

                2.1

                2.2

        1.2

                2.1

                2.2

+0

您正在尋找遞歸。 – jeroen

+0

你可以使用遞歸來解決這個問題,這也是你正在尋找的術語 – dimlucas

+0

@ jeroen,非常感謝你。我現在正在查看手冊並試圖解決這個問題。 – Joe

回答

2
<?php 

$tags = Array(
    0 => Array('0.1','0.2'), 
    1 => Array('1.1','1.2'), 
    2 => Array('2.1','2.2'), 
); 
$num = count($tags); 
myshow(0); 

function myshow($level) 
{ 
    global $tags, $num; 

    foreach ($tags[$level] as $tag) { 
     echo '<p style="text-indent:'.(2*$level).'em">'; 
     echo $tag; 
     echo '</p>'; 

     if($level+1 < $num) 
      myshow($level+1); 
    } 
} 
+0

非常感謝。這比我的好:) – Joe