2010-01-30 63 views
0

所以我想要做的是從我的數據庫中選擇所有不同的月份,然後將它們打印在列表中。那我可以完成。問題在於我需要我的列表成爲兩列。我用CSS實現這一點的方式是使用2個不同div的「左」和「右」,它們彼此相鄰。這對PHP造成了一個問題,因爲它需要在第六個月後回顯一個div並打開一個新的div。然後,它需要從停止和結束的地方重新開始。我不能僅僅列出HTML中的所有月份,要麼是因爲如果我沒有在該月的數據庫中有任何記錄,我不希望它列出一個月。有任何想法嗎?我希望我很清楚!多欄動態PHP列表

謝謝!

-williamg

+0

您是否需要以某種方式排序或格式化單獨的列表? – 2010-01-30 02:35:19

+3

嗯,內容/演示分離人羣讓我們都運行不合適的div。這是表格數據,因此請使用表格。 – Mike 2010-01-30 02:36:41

+0

從他所問的問題來看,我認爲這聽起來像他在創建兩列表格時會遇到同樣的困難。 – 2010-01-30 02:43:21

回答

2

像這樣的東西應該工作(基本的想法是隻保留幾個月的計數的增量它作爲您遍歷它們):

<div class="left"> 

<?php 
$x = 1; 
foreach($months as $month) { 

    # switch to the right div on the 7th month 
    if ($x == 7) { 
     echo '</div><div class="right">'; 
    } 

    echo "<div class=\"row\">{$month}</div>"; 

    # increment x for each row 
    $x++; 

} 

</div> 
0
<?php 
$numberOfMonths = count($months); 
$halfwayPoint = ceil($numberOfMonths/2); 

echo "<div class=\"left\">"; 
for($i=0; $i<$halfwayPoint; $i++){ 
     echo $months[$i] . "<br />"; 
} 
echo "</div><div class=\"right\">"; 

for($i=$halfwayPoint; $i<$numberOfMonths; $i++){ 
     echo $months[$i] . "<br />"; 
} 
echo "</div>"; 
?> 
0

咆哮: on

當顯示錶格數據時,使用table而不是浮動div。在禁用css的情況下查看頁面時,這是有意義的。如果您使用浮動的div,那麼您的數據將全部顯示下來。並非所有的table使用情況都很糟糕。人們經常討厭table這麼多,所以使用浮動div。當用於頁面佈局時,Table只有很差。

咆哮:關

當我需要有一些打開,關閉,並在兩者之間多餘的字符,我會利用implode顯示某些內容。這是例子:

$data = array('column 1', 'column 2'); 
$output = '<div>'.implode('</div><div>', $data).'</div>'; 
//result: <div>column 1</div><div>column 2</div> 

您可以將其擴展到幾乎任何東西。 Arrayimplode是php有多年的功能。你永遠不需要任何if來檢查它是否最後一個元素,然後插入結束字符,或者檢查它是否是第一個元素,然後插入開始字符,或者在元素之間打印另外的字符。

希望得到這個幫助。

更新:

我的壞誤讀問的主要問題。很抱歉的言論;) 這裏是我的代碼,以使在2列中顯示的數據:

//for example, I use array. This should be a result from database 
$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9); 
//should be 12 month, but this case there are only 9 of it 

for ($i = 0; $i <= 5; $i++) 
{ 
    //here I do a half loop, since there a fixed number of data and the item for first column 
    $output = '<div class="left">'.$data[$i].'</div>'; 
    if (isset($data[$i+6]) 
    { 
    $output = '<div class="right">'.$data[$i+6].'</div>'; 
    } 
    echo $output."\n"; 
} 
//the result should be 
//<div class="left">1</div><div class="right">7</div> 
//<div class="left">2</div><div class="right">8</div> 
//<div class="left">3</div><div class="right">9</div> 
//<div class="left">4</div> 
//<div class="left">5</div> 
//<div class="left">6</div> 

使用CSS來格式化輸出,所以你只要把div自上而下的其他解決方案,那麼CSS使父容器僅垂直放置6個項目,並將其餘部分放在現有內容的右側。我不太瞭解它,因爲它通常由其他CSS設計師或我的客戶提供。

+0

Rant:在 這不是真正的表格數據。第1行第1列的值與第1行第2列的值無關。表格數據爲西班牙語中的月/日或月/月。 thead將是什麼?那tbody呢?有沒有細胞? 他正在使用列進行設計/佈局,因此表格將不合適。 Rant:關 – 2010-01-31 14:51:20

+1

好的,謝謝指出。我誤解了這個問題,對不起。我已經在上面更新了我的答案。 – 2010-01-31 15:49:51

0

示例假定您有一個對象數組。

<div style="width:150px; float:left;"> 
<ul> 
<?php 

$c = count($categories); 

$s = ($c/3); // change 3 to the number of columns you want to have. 

$i=1; 
foreach($categories as $category) 
{ 
    echo '<li>' . $category->CategoryLabel . '</a></li>'; 
    if($i != 0 && $i % $s == 0) 
    { 
     ?> 
     </ul> 
     </div> 
     <div style="width:150px; float:left;"> 
     <ul> 
     <?php 
    } 
    $i++; 
} 

?> 
</ul> 
</div>