2016-05-17 7 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

関連する問題