2016-05-17 6 views
1

Nach der Organisation der folgenden PHP-Code, fand ich, dass sie tatsächlich wiederholen sich wieder und Agian.Wie vermeidet man die doppelte if-Anweisung in PHP?

Gibt es eine Möglichkeit, den Code in unendliche Ebene zu verbessern und zu erweitern?

Wie bezeichnen wir dieses Problem allgemein als technische Begriffe?

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

Dies ist das Ergebnis des Codes.

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

Sie suchen Rekursion. – jeroen

+0

Sie können Rekursion verwenden, um dieses Problem zu lösen, und das ist auch der Begriff, den Sie suchen – dimlucas

+0

@jeroen, vielen Dank. Ich schaue mir jetzt das Handbuch an und versuche, dieses Problem zu beheben. – Joe

Antwort

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

Vielen Dank. Es ist besser als meins :) – Joe

Verwandte Themen