2

我想要的是为 mysql 结果列中的每个新值创建一个新的无序列表。

我的查询看起来像这样,我将其放入数据数组中:

$connection = dbconnect();

$getusers = "SELECT users.usr_id, users.usr_firstname, users.usr_lastname, user_groups.group_name FROM users INNER JOIN user_groups ON users.usr_group = user_groups.group_id ORDER BY group_name ASC, users.usr_firstname ASC, users.usr_lastname ASC";
$result = mysql_query($getusers);

$data_array = array();
while($data = mysql_fetch_array($result)){
    $data_array[] = $data;
}

现在我需要显示该数据,以便每个新的 user_group 都是一个无序列表,并且具有相同组的每一行都作为该无序列表的列表项出现。

它与这个问题( PHP/MySQL 查询结果)非常相似,但我无法在正确的位置获得结束 ul。这是我的输出代码,尽管我知道这是错误的,因为 li 并不是 ul 的真正孩子。

$previousgroup = "";
foreach($data_array as $users){
    if($users['group_name'] != $previousgroup){
        echo "<ul class=\"group\">" . $users['group_name'] . "</ul>";
    }
    else{
        echo "<li id=\"m" . $users['usr_id'] . "\"><h4>" . $users['usr_firstname'] . " " . $users['usr_lastname'] . ", " . $users['cred_name'] . "</h4></li>";
    }
}

有没有更有效的方法来做到这一点?谢谢你的帮助。

4

2 回答 2

1
if($users['group_name'] != $previousgroup){
    echo "</ul><ul class=\"group\"><li>" . $users['group_name'] . "</li>";
}
echo "<li id=\"m" . $users['usr_id'] . "\"><h4>" . $users['usr_firstname'] . " " . $users['usr_lastname'] . ", " . $users['cred_name'] . "</h4></li>";

循环中的代码应如下所示,您需要<ul>从循环外部打开和关闭 a。

echo '<ul>';
foreach () { // here is the loop }
echo '</ul>';

这是用“肮脏”的方式打印出来的,至少。

我这样做的方法是构建一个二维数组,首先由 group_name 索引,然后是用户 ID。这意味着对数据进行两次传递,因为需要第二次循环来显示数据,但一般来说,您不会感觉到差异。

于 2012-06-18T16:32:24.497 回答
1

您可以通过这种方式更改 while 循环:

$data_array = array();
while($data = mysql_fetch_array($result)){
    $data_array[$data['group_name']][] = $data;
}

并且您将获得一个包含您的 group_name 的数组作为包含您的数据的其他数组的索引。要创建列表,您可以执行以下操作:

<ul>
  <?php
  foreach ($data_array as $temp_key => $temp_array)
  {
    ?>
    <li>
      <?php echo $temp_key; ?>
      <ul>
        <?php
        foreach ($temp_array as $datum)
        {
          echo ("<li>" . $datum['usr_firstname'] . "</li>";
        }
        ?>
      </ul>
    </li>
    <?php
  }
  ?>
</ul>

希望对你有帮助

于 2012-06-18T16:42:02.723 回答