我想要的是为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 Query Results)非常相似,但是我无法在正确的位置获得结束的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>";
}
}
有更有效的方法吗?谢谢你的帮助。
答案 0 :(得分: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>
。
echo '<ul>';
foreach () { // here is the loop }
echo '</ul>';
至少在你去的时候打印出去是“脏”的方式。
我这样做的方法是先构建一个由group_name索引的二维数组,然后再按用户ID编制索引。这意味着要对数据进行两次传递,因为显示数据需要第二个循环,但一般来说你不会感觉到差异。
答案 1 :(得分: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>
希望它适合你