php - 如何在 UL 中对重复的表值进行分组?

标签 php html mysql html-lists

所以我不确定是我的 foreach 循环还是我的 sql 查询需要修复,但我尝试按“categoryname”分组但无济于事。我希望类别名称 ($qs['name']) 只显示一次,并且属于该类别的所有 li 都显示在其中。任何帮助都会很棒。 我所拥有的是:

NEW HAMPSHIRE <--This is $state_name-->
Personal auto <--This is $qs['name']-->
  • Your young drivers—help them play it safe
Personal auto <--This is $qs['name']-->
  • The dangers of drunken driving
Personal auto <--This is $qs['name']-->
  • How to keep your vehicle safe from car thieves
ETC....

我正在寻找的是这个:

NEW HAMPSHIRE <--This is $state_name-->
Personal auto <--This is $qs['name']-->
  • Your young drivers—help them play it safe
  • The dangers of drunken driving
  • How to keep your vehicle safe from car thieves
ETC....

代码:

$sql = mysql_query(
"SELECT qs, state, title, link, category, categoryid, categoryname
FROM `irc_consumer_content`
JOIN `irc_consumer_content_category`
ON irc_consumer_content.category=irc_consumer_content_category.categoryid
ORDER BY categoryname ASC;");

$row = mysql_fetch_assoc($sql);

$states_array = array(   "AL"=>"Four-state topics",
                        "CT"=>"Connecticut topics",
                        "NH"=>"New Hampshire topics",
                        "NJ"=>"New Jersey topics",
                        "NY"=>"New York topics");

do {
  $qs_array[$row['state']][] = array(  "qs"=>$row['qs'],
                                       "title"=>$row['title'],
                                       "link"=>$row['link'], 
                                       "name"=>$row['categoryname']);
} while ($row = mysql_fetch_assoc($sql));

<div>
    <h1>Topics available</h1>
    <? //==== GET STATE ====================================    
    foreach ($states_array as $state => $state_name) { ?>
    <h2><? echo $state_name; ?></h2>
    <? //==== GET STATE TOPICS ====================== 
    foreach ($qs_array[$state] as $i => $qs) { ?>
    <h3><? echo $qs['name']; ?></h3>
        <ul class="first-level">
            <li class="list" id="<? echo $qs['qs']; ?>">      
                <div class="selected-list-item">
                    <div id="title-text">
                       <? echo iconv('Windows-1252', 'UTF-8', $qs['title']); ?>
                    </div>
                    <div class="ideas-div">
                        <div class="ideas-top">
                        </div>
                        <div class="idea-images">
                        </div>
                        <div class="ideas-bottom">
                        </div>
                    </div>
                </div>
            </li>   
        </ul>
        <? } ?>
        <? } ?>
</div>

代码:(已更新)

<div>
    <h1>Topics available</h1>
     <? //==== GET STATE ====================================   
        foreach ($states_array as $state => $state_name) { ?>
        <h2><? echo $state_name; ?></h2>
        <? $category = "";?>
            <? //==== GET STATE TOPICS ====================== 
                foreach ($qs_array[$state] as $i => $qs) { 
                    if ($category != $qs['name']){
                        $category = $qs['name'];
                ?>
                <h3><? echo $category; //echo $qs['name']; ?></h3>
                <ul class="first-level">
                <li class="list" id="<? echo $qs['qs']; ?>">      
                <? }else { ?>
                    </li>
                    </ul>
                    <ul class="first-level">
                    <li class="list" id="<? echo $qs['qs']; ?>">
                    <? }?> 
<!--ALL ELSE IS THE SAME-->

最佳答案

您可以检查当前类别是否与上一个类别相同。因此,您可以相应地打开和关闭 ul

例如

<div>
    <h1>Topics available</h1>
    <? //==== GET STATE ====================================    
    foreach ($states_array as $state => $state_name) { ?>
    <h2><? echo $state_name; ?></h2>
    <?php $old_name = ''; ?>

    <ul>

    <? //==== GET STATE TOPICS ====================== 
    foreach ($qs_array[$state] as $i => $qs) { ?>

    <?php if ($old_name != $qs['name']) : ?>
        <?php $old_name = $qs['name']; ?>

    </ul><--Close previous item ul-->
    </ul><--Open ul for new item-->

    <?php endif; ?>

    <h3><? echo $qs['name']; ?></h3>
    <ul class="first-level">
        <li class="list" id="<? echo $qs['qs']; ?>">      
            <div class="selected-list-item">
                <div id="title-text">
                   <? echo iconv('Windows-1252', 'UTF-8', $qs['title']); ?>
                </div>
                <div class="ideas-div">
                    <div class="ideas-top">
                    </div>
                    <div class="idea-images">
                    </div>
                    <div class="ideas-bottom">
                    </div>
                </div>
            </div>
        </li>   
    <? } ?>

    </ul>

    <? } ?>
</div>

另请记住,mysql* 函数已弃用。请改用 PDO

关于php - 如何在 UL 中对重复的表值进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39107078/

相关文章:

php - PDO 无法使用 ads 类型的对象作为数组(表单错误)

php - Mod Rewrite 并将 URL 作为参数传递

javascript - CSS、JavaScript 和 PHP 文件的路径

php - 将 cms 页面链接到特定图像

php - 按保留键排序并保留值顺序?

html - 可见性 :hidden does not work in Firefox but works in Chrome

html 按钮,值 ="submit"没有显示?

javascript - 在同一个元素上单击两次,然后在另一个元素上使第一个元素进入 "clicked"状态

mysql - 验证在 login.cs 页面中不起作用

c# - 如何在 ASP.NET MVC 中显示具有相同 ID 的所有行?