2013-12-21 17 views
0

我有一個從MySQL數組,現在我試圖把它放到一個4列使用while循環的表。我的方法是,當$counter%4==0,我回顯</tr>,使每4個項目將排列在一行。但是我不能得到我想要的結果,所以任何人都可以告訴我問題在哪裏,或者給我提供一個更好的方法來做到這一點?這是我的代碼:回聲一個數組從MySQL和在一個表中定義的行和列

<table border="0" cellspacing="0" cellpadding="0"> 
<tbody> 
<?php 

$query1 = "SELECT * FROM post WHERE post_status='New' AND post_type='Facilities' AND  post_keywords='icon'"; 
$run1 = mysql_query($query1); 

$counter=0; 
while($row1 = mysql_fetch_array($run1)){ 

     $post_id = $row1['post_id']; 
     $post_title = $row1['post_title']; 
     $post_date = $row1['post_date']; 
     $post_author = $row1['post_author']; 
     $post_keywords = $row1['post_keywords']; 
     $post_type =$row1['post_type']; 

     $post_content = $row1['post_content']; 
     $post_status =$row1['post_status']; 

if($counter%4==0){ 
echo '<tr>'; 
}   
?> 
<td>//here is the content from the array 
<div id="<?php echo $post_id?>" class="FacItem" onmousedown="function onmousedown() {  fac_change('down','<?php echo $post_id?>') }" onmouseup="function onmouseup() { fac_change('up','<?php echo $post_id?>') }" onmouseover="function onmouseover() { fac_change('over','<?php echo $post_id?>') }" onmouseout="function onmouseout() { fac_change('out','<?php echo $post_id?>') }"><a href="?page_id=282"><?php echo $post_content?></a></div> 
</td> 

<?php 
if($counter%4==0){ 
echo '</tr>'; 
} 
$counter++; 
} 
?> 
</tbody> 
</table> 

回答

-1

的問題是,你打開,並在同一輪循環的封閉排

你需要重新安排這樣的代碼:

<?php 
    if($counter%4==0) 
    { 
     echo '</tr>'; 
    } 
    $counter++; 

<?php 
    $counter++; 
    if($counter%4==0) 
    { 
     echo '</tr>'; 
    } 

現在,當計數器爲0時,一個新行開始,然後在關閉行之前變爲1,如果語句被執行......則對於每個第四個值,計數器變成4(或4的倍數)在關閉行之前,關閉行if語句被執行。

由於計數器仍然是循環下次執行時的倍數,所以會打開,但在此之後計數器變爲1,因此不會調用關閉。

Loop # Counter at <tr> if stmt Counter at </tr> if stmt 
    1    0 <tr>    1 
    2    1     2 
    3    2     3  
    4    3     4 </tr> 
    5    4 <tr>    5 
    6    5     6 
    7    6     7  
    8    7     8 </tr>      
+0

哇!爲什麼是負面投票? –

+0

在解決方案中,您已發佈,當$ counter爲0,4,8等時,添加close行元素,這不是OP需要的。他想要4個元素的列。所以,聲明應該檢查$計數器,當它變成3,7,11等。 – Stoic

+1

謝謝它的作品,我只需要重置cols! –

0

你的第二個條件檢查是錯誤的。原因是當您添加四個項目時您想要輸出</tr>。目前,</tr>被插入到第零項(即0,4,8等)上。所以,你應該用$counter % 4 == 3存在,相反,它會插入</tr>元素,正確:

// process to follow when the new row is being started 
if ($counter % 4 == 0) { 
    // start `tr` element here.. 
    echo '<tr>'; 
    // your code .. 
} 

// process to follow when 4 items have been counted for 
if ($counter % 4 == 3) { 
    // end `tr` element here.. 
    echo '</tr>'; 
    // your code .. 
} 

$counter++; 
+0

這也是另一種方式來做到這一點:),或像我提到的,把++櫃檯上方的if語句的密切TR。無論哪種方式都很好。 –

+0

不可以。您的解決方案不會輸出正確的html。看到我的評論。 – Stoic

相關問題