PHP - 为数组中的每个唯一值集生成HTML元素

时间:2014-04-10 19:36:38

标签: php mysql

我从这个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的初学者,所以感谢任何指导。

2 个答案:

答案 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;代码正是我的意思:))