【问题标题】:How to create binary tree in PHP using mysql database如何使用 mysql 数据库在 PHP 中创建二叉树
【发布时间】:2017-05-15 10:06:41
【问题描述】:

我想在 php 中从数据库值 打印二叉树(下图)

以上是我的数据库表结构

这是我尝试过的,在这段代码中我想显示用户 id PX100 的二叉树

<?php 
include 'db_connect.php';

$user_id = 'PX100';
$select_right_tree = $con->prepare("SELECT * FROM tbl_user_postion WHERE user_id=:user_id");
$select_right_tree->bindParam(":user_id", $user_id);
$select_right_tree->execute();
$fetch_right_tree = $select_right_tree->fetch(PDO::FETCH_ASSOC);
$ex_pos_right = $fetch_right_tree['pos_right'];
$ex_pos_left = $fetch_right_tree['pos_left'];
 
function right_part($pos_right) {
    if(!empty($pos_right)) {
        $select_left_tree = $con->prepare("SELECT pos_right, pos_left FROM tbl_user_postion WHERE user_id=:user_id");
        $select_left_tree->bindParam(":user_id", $pos_right);
        $select_left_tree->execute();
        $fetch_left_tree = $select_left_tree->fetch(PDO::FETCH_ASSOC);
        $user_right = $fetch_left_tree['pos_right'];
        $user_left = $fetch_left_tree['pos_left'];
        return array($user_right, $user_left);
        if(!empty($user_right)) {
            right_part($user_right);
        }
        if(!empty($user_left)) {
            left_part($user_left);
        }
    }
}

function left_part($pos_left) { 
    if(!empty($pos_left)) {
        $select_left_tree = $con->prepare("SELECT pos_right, pos_left FROM tbl_user_postion WHERE user_id=:user_id");
        $select_left_tree->bindParam(":user_id", $pos_left);
        $select_left_tree->execute();
        $fetch_left_tree = $select_left_tree->fetch(PDO::FETCH_ASSOC);
        $user_right = $fetch_left_tree['pos_right'];
        $user_left = $fetch_left_tree['pos_left'];
        return array($user_right, $user_left);
        if(!empty($user_left)) {
            left_part($user_left);
        }
        if(!empty($user_right)) {
            right_part($user_right);
        }
    }
}
?>

<div class="tree">
    <ul>
        <li>
            <a href="#"><img src="image/user.png" ><br/><?php echo $user_id; ?></a>
            <ul>
                <li>
                    <a href="#"><img src="image/user.png"><br/><?php echo $ex_pos_right; ?></a>
                    <?php 
                    if(!empty($ex_pos_right))
                    {	
                        list($pos_right1, $pos_left1) = right_part($ex_pos_right);
                  	?>
                            <ul>
                                <li> <a href="#"><img src="image/user.png"><br/><?php echo $pos_right1; ?></a>  </li>
                                <li> <a href="#"><img src="image/user.png"><br/><?php echo $pos_left1; ?></a>  </li>
                            </ul>
                        <?php 
                        }
                        ?>
                    </li>
                    <li>
                        <a href="#"><img src="image/user.png"><br/><?php echo $ex_pos_left; ?></a> 
                        <?php 
                        if(!empty($ex_pos_left))
                        {	
                            list($pos_right2, $pos_left2) = left_part($ex_pos_left);
                  	    ?>
                            <ul>
                                <li> <a href="#"><img src="image/user.png"><br/><?php echo $pos_right2; ?></a>  </li>
                                <li>  <a href="#"><img src="image/user.png"><br/><?php echo $pos_left2; ?></a>  </li>
                            </ul>
                        <?php   
                        }
                        ?>
                    </li>
                </ul>
            </li>
        </ul>
    </div>

以上代码的输出为Here

从数据库表中,PX103 是 PX108 和 PX110 的父级,PX105 是 PX107 和 PX111 的父级,PX106 是 PX109 的父级.但是 PX108、PX110、PX107、PX111 和 PX109 没有在树中显示。

请帮我解决这个问题。 谢谢你。

【问题讨论】:

  • 根据表的大小,获取整个表并在两个循环中创建一个树结构可能会更好。如果子项的 ID 总是高于其父项,则您只需要一个循环。
  • @PaulSpiegel。是的,childs 的 ID 总是比它的 parent 高。你能解释一下如何在 while 循环中打印它吗?

标签: php mysql recursion binary-tree


【解决方案1】:
<table class="table table-bordered table-striped">
<tr>
<td width="950" > 
<?php $m_id=NULL;$m_id=$_SESSION['id'];
$width=580;
for($lopp=0;$lopp<=3;$lopp++){
$tree=mysqli_query($sql,"select * from tree where distributer_id='".$m_id."'");
$m_id_fetch=mysqli_fetch_assoc($tree);
$left_m_id=$riggt_m_id="";
$tree_detaila=mysqli_query($sql,"select Name,yo_id from registration where yo_id='".$m_id."'");
if(!$tree_detaila) print mysqli_error($sql);
$detail=mysqli_fetch_assoc($tree_detaila);
if(!empty($m_id_fetch['pos_left'])) $left_m_id=$m_id_fetch['pos_left'];if(!empty($m_id_fetch['pos_right'])) $riggt_m_id=$m_id_fetch['pos_right'];
?>                          <table class="table-responsive" width="850" border="0" align="center" cellpadding="0" cellspacing="0">
                            <tr>
                                <td colspan="2" valign="top" align="center"> <table class="table-responsive" width="<?php print $width; ?>" border="0" align="<?php if(!empty($m_id_fetch['pos_left']) && $lopp>0) print "left"; elseif(!empty($m_id_fetch['pos_right']) && $lopp>0) print "right"  ?> " cellpadding="0" cellspacing="0"> 
                               <?php if($lopp==0) { ?> <tr>
                                    <td width="<?php print $width; ?>" align="center"> <img src="dashboard/images/user.jpg" width="45" height="50" class="img-circle" />
                                  </td>
                                </tr> 
                                <tr>
                                    <td align="center"><?php print strtoupper($detail['Name']); ?></td>
                                </tr>
                                <tr>
                                    <td align="center"><?php print $detail['yo_id']; ?></td>
                                </tr><?php } else { print ' <tr>
                                                <td colspan="2" align="left"></td>
                                            </tr>'; }    ?>
                                <tr>
                                    <td align="center">     
                                            <tr>
                                                <td colspan="2" align="<?php if(!empty($m_id_fetch['pos_left']) && $lopp>0) print "left"; elseif(!empty($m_id_fetch['pos_right']) && $lopp>0) print "right"  ?>"><img src="img/p.png" width="<?php print $width=$width-90; ?>   " height="5" /></td>
                                            </tr>

                                                <?php 
    if($left_m_id!="" )  
        {
            $tree_detaila_l=mysqli_query($sql,"select Name,yo_id from registration where yo_id='".$m_id_fetch['pos_left']."'");

$detail_l=mysqli_fetch_assoc($tree_detaila_l);
        }
        if($riggt_m_id!="")
        {
        $tree_detaila_r=mysqli_query($sql,"select Name,yo_id from registration where yo_id='".$m_id_fetch['pos_right']."'");

$detail_r=mysqli_fetch_assoc($tree_detaila_r);
        }
     ?>

                                                       <tr>
                                               <?php if($left_m_id!="" ){ ?> <td align="left">
        <a href='#' class='tt'> <img src="dashboard/images/user.jpg" width="45" height="50" class="img-circle" /> </a></td><?php } ?>
                                    <?php if($riggt_m_id!="" ){ ?> <td align="right">
                                   <a href='#' class='tt'> <img src="dashboard/images/user.jpg" width="45" height="50" class="img-circle" /> </a></td><?php } ?>


                                            </tr>
                                            <tr>
        <?php if($left_m_id!="") { ?><td align=" left"><?php print $detail_l['Name']; ?></td><?php } ?>                                                                           <?php if($riggt_m_id!="") { ?><td align=" right"><?php print $detail_r['Name']; ?></td><?php } ?>


                                            </tr>
                                            <tr>
<?php if($left_m_id!="") { ?><td align=" left">
<?php print $detail_l['yo_id']; ?>
</td><?php } ?>                                                                                                  <?php if($riggt_m_id!="") { ?><td align=" right">
<?php print $detail_r['yo_id']; ?>
</td><?php } ?>

                                            </tr>


                                        </table></td>
                                </tr>
                            </table><?php $width=$width-100;$m_id=$m_id_fetch['pos_right']; } ?>
                                                                                                                  </td>
                            </tr>

                        </table>`enter code here`

【讨论】:

  • 稍微编辑一下会使代码更具可读性。
猜你喜欢
  • 2012-04-04
  • 2019-12-04
  • 2010-10-24
  • 2023-03-25
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多