在过去的几个小时里,我一直试图弄清楚PHP代码在三列中显示一个列表,以便它有这个订单
A D G
B E H
C F I
但我真的迷路了。谁能帮我这个? 我目前只有按此顺序列出的代码
A B C
D E F
G H I
这是我目前的代码:
echo '<table><tr>';
foreach ($categories as $k => $category) {
if ($k % 3 == 0 && $k ! = 0) {
echo '</tr><tr>';
}
echo '<td><a href="category.php?category='.$category["id"].'">'.$category["category"].'</a></td>';
}
echo '</table>';
答案 0 :(得分:5)
试试这个:
$columns = 3;
$rows = ceil(count($categories) / $columns);
echo '<table>';
for ($row = 0; $row < $rows; $row++) {
echo '<tr>';
foreach ($categories as $k => $category) {
if ($k % $rows == $row) {
echo '<td><a href="category.php?category='.$category["id"].'">'.$category["category"].'</a></td>';
}
}
echo '</tr>';
}
echo '</table>';
效率不高,但现在我无法想出更好的做法。
答案 1 :(得分:5)
如果您希望列表中的呈现列表,您可以按逻辑顺序生成它,并使用CSS columns
属性设置列:
ul {
-moz-column-count: 2;
-webkit-column-count: 2;
column-count: 2;
}
坏消息是IE 9及更早版本不支持此功能,但像css3-multi-column.js这样的Columns polyfills在简单的情况下可能运行得很好(尽管它们有局限性和问题)。
答案 2 :(得分:3)
我有同样的问题,我发布了这个旧问题的答案,原因如下:
有些注意事项:
以下是我的完整答案:
function sortVertically( $data = array() )
{
/* PREPARE data for printing */
ksort( $data ); // Sort array by key.
$numCols = 3; // Desired number of columns
$numCells = is_array($data) ? count($data) : 1 ;
$numRows = ceil($numCells / $numCols);
$extraCells = $numCells % $numCols; // Store num of tbody's with extra cell
$i = 0; // iterator
$cCell = 0; // num of Cells printed
$output = NULL; // initialize
/* START table printing */
$output .= '<div>';
$output .= '<table>';
foreach( $data as $key => $value )
{
if( $i % $numRows === 0 ) // Start a new tbody
{
if( $i !== 0 ) // Close prev tbody
{
$extraCells--;
if ($extraCells === 0 )
{
$numRows--; // No more tbody's with an extra cell
$extraCells--; // Avoid re-reducing numRows
}
$output .= '</tbody>';
}
$output .= '<tbody style="float: left;">';
$i = 0; // Reset iterator to 0
}
$output .= '<tr>';
$output .= '<th>'.$key.'</th>';
$output .= '<td>'.$value.'</td>';
$output .= '</tr>';
$cCell++; // increase cells printed count
if($cCell == $numCells){ // last cell, close tbody
$output .= '</tbody>';
}
$i++;
}
$output .= '</table>';
$output .= '</div>';
return $output;
}
我希望你觉得这个答案很有用。