2012-04-30 39 views
2

我有一個while/for循環,內部有foreach循環。閱讀代碼將使我對自己試圖在邏輯方面達到的目標有所解釋。foreach語句強制while/for循環多次

通俗地說,我試圖在PHP中創建日曆。該foreach語句創建35個細胞,日曆界面,4周,7天,5×7 = 35。

while環已採取的天數在四月(30),並試圖每個範圍1-每個細胞30個。

但是,在執行下面的代碼時,每個數字會迭代30次。

$i = 1; 
while ($i <= 30){ 
    foreach ($this->cells as $cells){ 
     foreach ($cells as $key => $object){ 
      echo "<td>" . $i . "</td>";      
      if($object % 7 == 0){ 
       echo "</tr><tr>"; 
      } 
     } 
    } 
    $i++; 
} 

我嘗試這樣做:

$i = 1; 
while ($i <= 30){ 
    foreach ($this->cells as $cells){ 
     foreach ($cells as $key => $object){ 
      echo "<td>" . $i . "</td>"; $i++;        
      if($object % 7 == 0){ 
       echo "</tr><tr>"; 
      } 
     } 
    } 

} 

哪個,而不是輸出1-30很多次,每次,它輸出1-35,當我只想要1-30。

我已經嘗試了一個for循環,結果它打印每個數字的許多。對於循環代碼:

for ($i = 1; $i <= 30; $i++){ 
       foreach ($this->cells as $cells){ 
        foreach ($cells as $key => $object){ 
       echo "<td>" . $i . "</td>";    
       if($object % 7 == 0){ 
        echo "</tr><tr>"; 
       } 
        } 
       } 
      } 

$this->cells是一個數組

+0

爲什麼不使用for()'循環而不是'while()'? – ThiefMaster

+0

因爲我不熟悉它。可能仍然會出現相同的問題,如果只是改變這個詞,而爲 – RSM

+2

它是如何4 * 7 = 35?..請解釋.. –

回答

2
$i=0; 
foreach ($this->cells as $cells){ 
    foreach ($cells as $key => $object){ 
     if($i<=30) 
      echo "<td>" . $i . "</td>"; 
     $i++;        
     if($object % 7 == 0){ 
      echo "</tr><tr>"; 
     } 
    } 
} 

範圍1-35試試這個代碼

+1

這是一個很好的答案,對我有幫助。然而,我將$ i = 0更改爲$ i = 1,因爲我想要第一個單元格爲1.此代碼確實存在一個問題,但有5個單元格(35-30)會被忘記,我仍然希望這些單元格有一個​​ – RSM

+1

然後把這一行後我的IF循環,否則回聲'​​&bnsp;'; –

+0

感謝您的幫助 – RSM

1
$i=0; 
while ($i++ < 35){ 
    echo '<td>' . ($i <= 30 ? $i : '&nbsp;') . '</td>'; 
    if($i % 7 == 0) { 
     echo '</tr><tr>'; 
    } 
} 

我真的不知道爲什麼你需要做兩循環,你可以做到這一切與一(除非你需要循環$this->cells,在這種情況下忽略這個答案:p)