【发布时间】:2019-11-27 23:03:23
【问题描述】:
我的代码能够捕获初始评论和第一级回复,但它似乎无法捕获对回复的回复。我知道它需要使用某种形式的递归的不确定代码,但不太确定如何正确实现它。 这是我的 phpMyAdmin 表的样子:
id名称评论reply_id
1 BigBadProducer1 我喜欢这个 vst!我用它所有的时间! 0
2 DrummaBoy504 嘿,我是鼓队的鼓手! 0
3 Mike Smith 你是如何让 vst 听起来如此出色的... 1
4 BigBadProducer1 是的,我从 YouTube Mike S 那里学会了如何调整它... 3
5 SmoothBeatz3 伙计,我一直在寻找这样的 vst... 0
6 FanBoy123 嘿Drumma,你什么时候发布新的hi... 2
7 Mike Johnson Hey Fanboy123,你为什么这么喜欢 Drum S... 6
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<?php
// Create connection
$conn = new mysqli('localhost', 'root', 'mypassword', 'commentsystem2');
$sql1 = "SELECT * FROM comments WHERE reply_id = 0";
$result1 = mysqli_query($conn, $sql1);
while ($comment = mysqli_fetch_array($result1)) {
$id = $comment['id'];
$name = $comment['name'];
$comment = $comment['comment'];
echo '
<div class="comments" style="position:relative; margin:auto; width:500px; border:1px solid black; margin-top:1px;">
<div>'.$name.'</div>
<div>'.$comment.'<br><br></div>
</div>
';
$sql2 = "SELECT * FROM comments WHERE reply_id = $id";
$result2 = mysqli_query($conn, $sql2);
while ($reply = mysqli_fetch_array($result2)) {
$id_reply = $reply['id'];
$reply_name = $reply['name'];
$reply_comment = $reply['comment'];
$reply_id = $reply['reply_id'];
echo '
<div class="replies" style="position:relative; margin:auto; width:500px; border:1px solid black; margin-top:1px;">
<div style="width:80%; text-align:center;">'.$reply_name.' replied to '.$name.'</div>
<div style="width:80%; text-align:center;">'.$reply_comment.'<br><br></div>
</div>
';
}//end of replies while loop
}//end of comments while loop
?>
</body>
</html>
【问题讨论】:
-
一些基本思想:递归并不是唯一的方法。查看“物化路径”:您必须重做 reply_id,但这样做的好处可能是值得的。如果您确实选择继续使用递归,则需要采取措施实现更复杂的编码风格。目前,您正在使用一种非常程序化的风格:处理页面呈现中发生的事情。您需要采用更多的 OOP 风格;至少你需要一个调用自身的函数。我建议使用stackoverflow.com/a/58806465/2129574 中的样式
-
当你得到顶部的逻辑和底部的表示时,那么合并函数进行递归就更容易了。
-
感谢蒂姆的概念。你有我可以测试的示例或代码 sn-p 吗?我需要将它保存在数据库中,但我愿意尝试你的想法。再次感谢。