按 ul 列表循环分组


Looping grouping by ul list

我的数据库表中有 100 条位置记录,例如我需要使用 ul list 分成 4 列,其中每个 ul/列有 25 条记录,但我不太能让它工作,这是我的代码:

$sql = "SELECT * FROM districts";
$consulta = mysql_query($sql);
$beginTag = '
    <div class="four columns">
        <h4>&nbsp;</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>&nbsp;</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>&nbsp;</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;
  }
}