2010-01-30 62 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>