【发布时间】:2017-05-15 10:06:41
【问题描述】:
这是我尝试过的,在这段代码中我想显示用户 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