我从这个PHP脚本的MySQL数据库表中生成了<ul>
:
$result = mysqli_query($con,"SELECT * FROM city_list ORDER BY city_state");
echo "<ul class=\"chapter-list\">";
while($row = mysqli_fetch_array($result))
{
echo "<li data-state=\"" . $row['city_state'] . "\">" . $row['city_name'] . "</li>";
}
echo "</ul>";
输出如下:
<ul>
<li data-state="alabama">Birmingham</li>
<li data-state="alabama">Bear Creek</li>
<li data-state="alabama">Belk</li>
<li data-state="kansas">Topeka</li>
<li data-state="kansas">Olathe</li>
</ul>
我想在特定<li>
值的每个组之前生成一个标头作为data-state
元素。所以,我想最终得到这样的标记:
<ul>
<li>Alabama</li>
<li data-state="alabama">Birmingham</li>
<li data-state="alabama">Bear Creek</li>
<li data-state="alabama">Belk</li>
<li>Kansas</li>
<li data-state="kansas">Topeka</li>
<li data-state="kansas">Olathe</li>
</ul>
是否有一个PHP数组函数来做这样的事情,或者我可能不得不求助于JS的东西?我已经通过了PHP文档,但尚未找到解决方案。我是PHP的初学者,所以感谢任何指导。
答案 0 :(得分:0)
这是一种方法。每次有一个新的$row['city_state']
时,if条件都为真,它将回显一个新的标题:
$last_state = '';
while($row = mysqli_fetch_array($result))
{
if ($last_state != $row['city_state']){
echo '<li>' . ucfirst($row['city_state']) . '</li>';
}
echo '<li data-state="' . $row['city_state'] . '">' . $row['city_name'] . '</li>';
$last_state = $row['city_state'];
}
答案 1 :(得分:0)
您可以将之前的值$row["city_state"]
保存到while循环外的变量,并检查新$row["city_state"]
是否等于旧值。如果这两个值不相等,则添加类似此项'<li data-state="'.$row["city_state"].'">'."Something".'</li>'
修改强> larsAnders&#39;代码正是我的意思:))