php - 遍历标题选项卡树 MySQL 和 PHP

标签 php mysql tree tabs iteration

试图遍历从 mysql 表中提取的树以形成组织良好的标题选项卡,我这样做是因为在每个选项卡上我可以授予特定用户查看或不查看此选项卡的权限。 表包括选项卡详细信息 表格看起来像这样:

表格标签

Id        Text         isparent        parentid        hassub
1         Menu 1          1                              1
2         Menu 2          1                              1
150       Menu Level 1                     1             1
151       Menu Level 1.0                   150           1
152       Menu Level 1.00                  151           1
153       Menu Level 1.000                 152           0
154       Menu Level 2                     1             1
157       Menu Level 2.x                   154           0
158       Menu Level 1.x                   150           0
159       Menu Level 1.y                   150           1
160       Menu 2.1                         2             1
161       Menu 2.11                        160           0
163       Menu Level 1.yy                  159           0



 echo '<ul id="main-menu" class="main-menu">';


                $selectparent = "SELECT * FROM tabs WHERE isparent>0";
                $runparent=mysql_query($selectparent,$con);
                if(!$runparent)die("ERROR11");

                for($counterparent=0;$rowparent=mysql_fetch_assoc($runparent);$counterparent++){

                    $parentid=$rowparent['Id'];
                    $parenttext=$rowparent['text'];
                    $parenthassub=$rowparent['hassub'];

                    if($parenthassub==1){       // if parent has sub , select from child tab where parent id =

                        echo '<li class="has-sub">';
                        echo 'text';

                        while($parentid>0){

                            $selectchildparent = "SELECT * FROM tabs 
                                            WHERE parentid='$parentid'";
                            $runchildparent=mysql_query($selectchildparent,$con);
                            if(!$runchildparent)die("ERROR11");
                            echo "<ul>";
                            for($counterchildparent=0;$rowchildparent=mysql_fetch_assoc($runchildparent);$counterchildparent++){

                                $childid=$rowchildparent['Id'];
                                $childhassub=$rowchildparent['hassub'];
                                $childtext=$rowchildparent['text'];

                                if($childhassub==1){    // if child has sub select from childtab where child_id=childid
                                    echo '<li class="has-sub">';
                                    echo 'text';
                                    $parentid=$childid;
                                }
                                else{
                                    echo '<li>';
                                    echo 'text';
                                    echo '</li>';

                                }
                            }
                            $parentid=0;
                            echo "</ul>";
                        }
                    }
                    else{
                                    echo '<li>';
                                    echo 'text';
                                    echo '</li>';
                    }
                }
                echo '</ul>';

如果标签有子标签,我需要将其作为标题标签(基于树),它将读取具有相同父 ID 的其他 child 。

最佳答案

使用 mysqli 语句,因为 mysql 语句已被弃用。 试试这个,

$con = mysqli_connect($servername, $username, $password, $db);

if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

echo '<ul id="main-menu" class="main-menu">';
$selectparent = "SELECT * FROM tabs WHERE isparent>0";
$runparent= mysqli_query($con, $selectparent);

$rowparent = mysqli_fetch_all($runparent,MYSQLI_ASSOC);
for($counterparent=0;$counterparent < count($rowparent);$counterparent++){

    $parentid=$rowparent[$counterparent]['Id'];
    $parenttext=$rowparent[$counterparent]['text'];
    $parenthassub=$rowparent[$counterparent]['hassub'];
    echo '<h4>'.$parenttext.'</h4>';
    recursive_loop($con,$parentid,$parenthassub);
}
echo '</ul>';

function recursive_loop($con, $id, $hassub){
    if($hassub == 0)
        return;
    echo '<ul>';
    $selectparent = "SELECT * FROM tabs WHERE parentid = $id";
    $runparent= mysqli_query($con, $selectparent);
    if($runparent){

        $rowparent = mysqli_fetch_all($runparent,MYSQLI_ASSOC);

        for($counterparent=0;$counterparent < count($rowparent);$counterparent++){

            $parentid=$rowparent[$counterparent]['Id'];
            $parenttext=$rowparent[$counterparent]['text'];
            $parenthassub=$rowparent[$counterparent]['hassub'];
            echo '<li class="has-sub">';
            echo $parenttext;
            echo'</li>';
            recursive_loop($con,$parentid,$parenthassub);
        }
    }
    echo '</ul>';
}

我使用了递归,因为我们不知道你的菜单有多深。

关于php - 遍历标题选项卡树 MySQL 和 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54801482/

相关文章:

r - 在 R 中构建 N 叉树

php - 了解 PHP 中的输入转义

php - 空 MySQL 查询结果没有按预期工作?

mysql select where base64 不在之前

从树中删除节点时的java内存问题

C:寻找树中特定叶子的霍夫曼编码路径

php - 修补基于时间的 sql 注入(inject)

php - 将 OpenID 与现有网站登录系统结合使用

php - Ajax 片段元标记 - Googlebot 未读取页面内容

mysql - MySQL Char() 或其他字段的顺序 UID 集生成