Php 如何在三个较短的列中显示长列表?

Php 如何在三个较短的列中显示长列表?,php,html-table,Php,Html Table,有没有办法修改这个PHP代码 foreach ($categories as $category) { print("<tr>"); print("<td><a href=\"category.php?category=" . $category["id"] . "\">{$category["category"]}</a></td>");

有没有办法修改这个PHP代码

    foreach ($categories as $category)    
    {
        print("<tr>");               
        print("<td><a href=\"category.php?category=" . $category["id"] . "\">{$category["category"]}</a></td>");            
        print("</tr>");    
    }

您希望在每行标记中使用3个单元格标记:

$cols = 3;
$col = 0;
foreach ($categories as $category)    
{
    if($col == 0)
        print("<tr>");            
    if($col < $cols) {
        print("<td><a href=\"category.php?category=" . $category["id"] . "\">{$category["category"]}</a></td>"); 
        $col++;
    } else {
        print("</tr>");  
        $col = 0;
    }  
}
if($col != 0)
    print("</tr>");
$cols=3;
$col=0;
foreach($categories作为$category)
{
如果($col==0)
打印(“”);
如果($col<$cols){
打印(“”);
$col++;
}否则{
打印(“”);
$col=0;
}  
}
如果($col!=0)
打印(“”);
$i=1;
foreach($categories作为$category)
{
如果($i==1){
打印(“”);
}             
打印(“”);
如果($i==3){
打印(“”);
$i=1;
}
$i++;
}
此列表如下所示:

//    0,1,2
//    3,4,5

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,1,2
//    3,4,5
回声';
foreach($k=>$category的类别){
如果($k%3==0&$k!=0){
回声';
}
回声';
}
回声';

假设$categories是一个数组

$columns = 3;
$rows = ceil( sizeof( $categories ) / $columns );
echo "<table>\n";    
for ( $row = 1; $row <= $rows; $row++ )    
{
    echo "<tr>\n";  
    for ($column = 1; $column <= $columns; $column++) {
        $p = (($column - 1) * $rows) + $row - 1;
        $value = sizeof($categories) > $p ? $categories[$p] : '&nbsp;';
        echo "<td>{$value} {$p}</td>\n";
    }
    echo "</tr>\n";
 }
echo "</table>";

您想将其保留为3列表,还是也可以更改HTML标记并添加一些CSS?我倾向于使用array_chunk和3 uls。我同意这一点,但需要注意的是,类别键可能不是整数,也可能不是基于0的,线性或连续。根据$categories中元素的数量,末尾将缺少标记和一些单元格。有没有办法修改此选项,以便条目按字母顺序在列中排序而不是按行排序?第二个显示三行非常长的行。我已在原始问题中添加了所需的显示顺序。是否有没有一种方法可以修改这一点,使条目按字母顺序按列排序而不是按行排序?我已经将所需的显示顺序添加到了我的原始问题中。这会有点棘手。。这本身可能是个问题。或者是一个有趣的学习算法,你可以自己尝试和使用:)
//    0,1,2
//    3,4,5

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>';
$columns = 3;
$rows = ceil( sizeof( $categories ) / $columns );
echo "<table>\n";    
for ( $row = 1; $row <= $rows; $row++ )    
{
    echo "<tr>\n";  
    for ($column = 1; $column <= $columns; $column++) {
        $p = (($column - 1) * $rows) + $row - 1;
        $value = sizeof($categories) > $p ? $categories[$p] : '&nbsp;';
        echo "<td>{$value} {$p}</td>\n";
    }
    echo "</tr>\n";
 }
echo "</table>";
1 4 7
2 5 8 
3 6 9