Php 我无法以正确的方式放置最后一个div。While循环

Php 我无法以正确的方式放置最后一个div。While循环,php,html,mysql,Php,Html,Mysql,我无法以正确的方式放置最后一个div 用于查询的数据库的我的输出: SELECT a.id, a.name, b.sub_id, b.sub_name FROM cat a, sub_cat b WHERE a.id = b.cat_id 将是: | id | name | sub_id | sub_name | | 1 | moblie | 1 | Phone | | 1 |

我无法以正确的方式放置最后一个div

用于查询的数据库的我的输出:

SELECT a.id, a.name, b.sub_id, b.sub_name FROM cat a, sub_cat b WHERE a.id = b.cat_id
将是:

|  id  |  name     | sub_id | sub_name                  |
|  1   | moblie    |   1    | Phone                     |
|  1   | mobile    |   2    | Mobile Phones Accessories |
|  2   | Lifestyle |   3    | Arts                      |
|  2   | Lifestyle |   4    | Books                     |
我想让这个结构:

    <div id="moblie" class="tab-pane active">
<a href="?cat=1&amp;sub_cat=1">Phones</a>
<a href="?cat=1&amp;sub_cat=2">Mobile Phones Accessories</a>
</div>
<div id="Lifestyle " class="tab-pane">
<a href="?cat=2&amp;sub_cat=3">Arts</a>
<a href="?cat=2&amp;sub_cat=4">Books</a>
</div>

我的原始Php代码:

<?php $query = "SELECT a.id, a.name, b.sub_id, b.sub_name FROM cat a, sub_cat b WHERE a.id = b.cat_id";
        $result = mysql_query($query);
        $i=0; 
        $a=1; 
        $b=0; 
        while($row = mysql_fetch_assoc($result)){
            $i++;
            if($i == 1){$set = "active";}else{$set = NULL;}
            $hre=strtolower(preg_replace("/[^a-zA-Z]+/", "", $row['name'])); 
            while($a == $row['id']){ $a++;?>
            <div id="<?=$hre?>" class="tab-pane <?=$set?>">
            <?php }?>
            <a href="?cat=<?=$row['id']?>&sub_cat=<?=$row['sub_id']?>"><?=$row['sub_name']?></a>
            <?php while($b == $row['id']){ $b++;?></div>
            <?php }
        }?>

重要

<div id="mobile" class="tab-pane active">
  <a href="?cat=1&amp;sub_cat=1">Phone</a>
  <a href="?cat=1&amp;sub_cat=2">Mobile Phones Accessories</a>
</div>
<div id="Lifestyle" class="tab-pane">
  <a href="?cat=2&amp;sub_cat=3">Arts</a>
  <a href="?cat=2&amp;sub_cat=4">Books</a>
</div>
避免使用
mysql.*
函数!他们被弃用了

对于您的解决方案,您可以简单地使用以下方法:

<?php
    $result = mysql_query($query);
    $flag = 0;
    while (false !== ($data = mysql_fetch_array($result)))
    {
        if ($data["id"] != $flag)
        {
            if ($data["id"] != 1) echo "</div>\n";
            echo '<div id="' . $data["name"] . '" class="tab-pane', ($data["id"] == 1) ? ' active' : '', '">', "\n";
        }
        echo '<a href="?cat=' . $data["id"] . '&amp;sub_cat=' . $data["sub_id"] . '">' . $data["sub_name"] . '</a>', "\n";
        $flag = $data["id"];
    }
?></div>

如果您按类别名称对完整的结果“分组”进行迭代会怎么样

 $awesomearray=array();
 while($row = mysql_fetch_assoc($result)){
     $awesomearray[$row['name'][]=$row;
 }
然后迭代分组数组

foreach($awesomearray as $category=>$data) {
    echo '<div id="'.$category.'" class="tab-pane">     ';
        foreach($data as $subcategory) {
            echo '<a href="?cat='.$subcategory['id'].'&amp;sub_cat='.$subcategory['sub_id'].'">'.$subcategory['sub_name'].'</a>';
        }
    echo '</div>     ';
}
foreach($awesomearray作为$category=>$data){
回声';
foreach($子类别数据){
回声';
}
回声';
}
这不涉及“活动类”,但我相信您可以解决它


PD:如果您使用php-pdo_mysql而不是php mysql,您可以跳过第一部分,使用fetchAll和pdo::FETCH_组。给它一个机会。

事实上,我有n行,n个id。我对strtolower进行了更改(preg_replace(“/[^a-zA-Z]+/”,“,$data['name');因为有一些javascript..你的代码工作得很好。。!我无法理解“避免使用mysql_*函数!它们已被弃用”,您有比mysql_*函数更好的选项吗?需要将代码$awesomearray[$row['name'][]=$row;更改为$awesomearray[$row['name']][=$row;。导致脚本错误。
foreach($awesomearray as $category=>$data) {
    echo '<div id="'.$category.'" class="tab-pane">     ';
        foreach($data as $subcategory) {
            echo '<a href="?cat='.$subcategory['id'].'&amp;sub_cat='.$subcategory['sub_id'].'">'.$subcategory['sub_name'].'</a>';
        }
    echo '</div>     ';
}