2010-12-21 56 views
0

我对代码重复有点奇怪的问题。有大量的循环是这样的: 偏执:避免代码重复/在循环之后

$prev_name = null; 
    $clone = null; 

    while($row = mysql_fetch_assoc($res)){ 
     if($prev_name != $row['req']){  
     if($prev_name){ 
      while($clone <= $end){    
      echo '<td>-</td>';    
      $clone->step(); 
      } 
      echo '</tr>'; 
     } 
     echo '<tr><td>' . htmlspecialchars($prev_name = $row['req']) . '</td>';                                  
     $clone = clone $start;   
     } 

     $rowdate = date_create($row['date']); 
     while($clone < $rowdate){   
     echo '<td>-</td>'; 
     $clone->step(); 
     } 

     echo '<td>' . $row[$field] . '</td>'; 
     $clone->step(); 
    } 

    if($prev_name){ 
     while($clone <= $end){ 
     echo '<td>-</td>'; 
     $clone->step(); 
     } 
     echo '</tr>'; 
    } 

正如你看到的,如果()循环之后是在环2挡,如果()一样。是否有可能减少这种重复?

回答

3

把它放在一个函数中。

function writeSteps($prev_name,$clone,$end) 
{ 
    if($prev_name){ 
     while($clone <= $end){    
     echo '<td>-</td>';    
     $clone->step(); 
     } 
} 
1

当然。 Extract Method是你的朋友。

只需将此代码放入方法中并从两个地方调用它即可。

if($prev_name){ 
    while($clone <= $end){    
    echo '<td>-</td>';    
    $clone->step(); 
    } 
    echo '</tr>'; 
}