2016-12-13 56 views
2

我是新来的PHP,我已经通过所有的互联网寻找解决我的问题的方法,但仍然找不到解决方案。如何将php输出分成多列?

我有一个PHP代码,看起来像这样:

<?php 
if ($comments_count) { 
    for($i=0; $i<$comments_count; $i++) { 
     if ($dont_show_email[$i] != '1' && $email != '') { 
      $author[$i] = "<a href=\"mailto:{$email[$i]}\">{$author[$i] 
     } 
     </a>"; 
    } 
    $text[$i] = str_replace(chr(13), '<br />', $text[$i]); 
?> 
<div> 
    <?php print $author[$i]; ?> 
    <?php print $time[$i]; ?> 
    <?php print htmlspecialchars_decode($text[$i]); ?> 
</div> 

显示像这样的输出:

Post 1 
Post 2 
Post 3 
Post 4 

我已经试过几乎anythign我找到了,但我不能使它工作为了我。 CSS列计数也没有奏效,因为每个帖子都有不同的高度尺寸,所以大多数帖子在一列的末尾被减半。

我要让这样显示的输出:

Column1 Column2 Column3 
Post 1 Post 2 Post 3 
Post 4 Post 5 Post 6 

我需要在列输出分裂一样,所以每一个岗位可以保持不同的高度尺寸。

谢谢你的帮助。

+0

什么是$ comments_count。的print_r($ comments_count);出口; – Ima

+1

与php无关您正在寻找一个css解决方案。尝试在帖子'div'上显示:inline-block' – cske

+1

当然你在谈论一个HTML表格作为实现该布局的最简单机制 – RiggsFolly

回答

0

试试这个(HTML无边距表为基础)的解决方案:

<table style="border: none;"> 
<?php 
$columns = 3; 
for($i=0; $i<$comments_count; $i++) { 
    if ($i % $columns == 0) echo "<tr>"; // begin of row 
    echo "<td>{$author[$i]}</td>"; 
    echo "<td>{$time[$i]}</td>"; 
    echo "<td>" . htmlspecialchars_decode($text[$i]) . "</td>"; 
    if ($i % $columns == ($columns - 1)) echo "</tr>"; // end of row 
} ?> 
</table> 
+0

很好的解决方案。这很好,它工作正常。但这并不能解决我的问题。将帖子的显示更改为@LukeBriggs表示已解决。但非常感谢你的帮助。 –

0

更新HTML代码

<div class="box"> 

添加CSS

.box{float:left; width:31%; margin:3px; padding:5px;} 
+0

从一个在HTML/CSS布局引擎上工作的人的角度来看,我并不是很喜欢用这种方式使用'float'的风扇;这不是它的设计目的。具有声明宽度的“inline-block”对于此目的更好。 –

+0

你也可以这样做:) –

+0

'Float'以复杂的方式影响其兄弟姐妹和父母,最终在过度使用时表现不佳,并可能导致意外的流动问题。它被设计用于将偶尔的图像推到文章的一侧,并让文本在其周围流动,而不是使用浮动元素创建整个布局。 –