我正在数据库中查询按字母顺序编号为1-26的名称。我有下面的代码,但是由于html是tr然后td结构的,所以表是按行而不是按列按字母顺序显示的。如何使它按列顺序显示?

$query = mysql_query("SELECT name FROM people WHERE main=1 ORDER BY id");
$i = 0;
while($result = mysql_fetch_array($query)) {
    $name = $result['name'];
    if ($i % 5 == 0) echo "<tr>\n";
    echo "<td width=\"150\">";
    echo "<a href=\"#".strtolower($name)."\">".$name."</a><br />";
    echo "</td>\n";
    $i++;
    if ($i % 5 == 0) echo "</tr>\n";
};

阿尔法贝塔查理
三角回声狐步舞
VS
阿尔法查理回声
贝塔三角狐步舞
另外,如果有更有效的方法,我愿意重新编写代码。

最佳答案

编辑:
在我本人,Kerrek SB和opbswinnerton之间的评论讨论之后,下面的代码似乎是最有效的:

$columns = 3;
$rowcount = mysql_num_rows($query);
$rows = ceil($rowcount / $columns);
$rowdata = array_fill(0, $rows, "");
$ctr = 0;
while ($result = mysql_fetch_array($query))
    $rowdata[$ctr++ % $rows] .= '<td>'.$result['name'].'</td>';
echo '<tr>'.implode('</tr><tr>',$rowdata).'</tr>';

这将创建三列,垂直填充(我的原始答案将创建三行)。它还正确初始化数组(防止php警告),为不能被列计数整除的结果计数生成正确的行计数,并结合kerrek的聪明的“下标中的calc row”技巧。
原帖:
您可以使用数组和内爆()这样,您只需在结果中传递一次:
$row = 0;
$rows = 3;
$rowdata = array();
while($result = mysql_fetch_array($query))
{
   if ($row >= $rows) $row = 0;
   $rowdata[$row++] .= '<td>'.$result['name'].'</td>';
}

echo '<tr>'.implode('</tr><tr>',$rowdata).'</tr>';

10-06 00:27