我的数据库表中有 100 条位置记录,例如我需要使用 ul list 分成 4 列,其中每个 ul/列有 25 条记录,但我不太能让它工作,这是我的代码:
$sql = "SELECT * FROM districts";
$consulta = mysql_query($sql);
$beginTag = '
<div class="four columns">
<h4> </h4>
<ul class="footer-links">';
$endTag = '</ul></div>';
$html = '';
$counter = 4;
if ($counter >= 4) {
echo $beginTag;
}
while ($mostrar = mysql_fetch_array($consulta)) {
$counter++;
$town = $mostrar['name_en'];
echo '<li><a href="#"><strong>'.$town.'</strong> Jobs</a></li>';
$counter = 0;
}
if ($counter >= 4) {
echo $endTag;
}
请注意,mysql_*
函数已被弃用,因此您应该使用mysqli_*
或PDO。以下代码将导致 25
li
的四个ul
。使用 CSS,您可以将这些ul
对齐为四列。否则,您可以有 25 个ul
,每个li
4 个以达到相同的效果。
$connection = mysqli_connect('your_server', 'your_username', 'your_password', 'your_database');
if (!$connection) {
echo mysqli_connect_errno();
}
$sql = "SELECT * FROM districts";
$consulta = mysqli_query($connection, $sql);
$beginTag = '
<div class="four columns">
<h4> </h4>
<ul class="footer-links">';
$i = 0;
while ($mostrar = mysqli_fetch_array ($consulta)) {
$town = $mostrar['name_en'];
if ($i % 25 == 0) {
echo '</ul><ul>';
}
echo '<li><a href="#"><strong>'.$town.'</strong> Jobs</a></li>';
$i++;
}
echo '</ul></div>';
你的代码有几个问题:计数器在每个循环中被重置,所以永远不会达到你的最大值,你的$beginTag
和$endTag
不会在循环中输出。
您可以通过从 db 查询中获取行计数来计算每列的行数,以便在将来行数发生变化时代码仍然有效。
您还应该使用mysqli
因为MySQL扩展已被弃用多年,并且即将在即将发布的PHP7版本中被删除。
// assumes your mysqli_connect on $con
$sql = "SELECT * FROM districts";
$consulta = mysqli_query($con, $sql);
$beginTag = '
<div class="four columns">
<h4> </h4>
<ul class="footer-links">';
$endTag = '</ul></div>';
$html = '';
// calculate the max rows per column
$cols = 4;
$max = ceil(mysqli_num_rows($consulta) / $cols);
$counter = 0;
while ($mostrar = mysqli_fetch_assoc($consulta)) {
// check for first row to output the beginTag
if ($counter == 0) {
echo $beginTag;
}
$town = $mostrar['name_en'];
echo '<li><a href="#"><strong>'.$town.'</strong> Jobs</a></li>';
$counter++;
// check for max per column
if ($counter >= $max) {
echo $endTag;
// reset the counter
$counter = 0;
}
}