我正在努力制作像Disqus这样的评论主题。我在PHP中设置逻辑时遇到问题,以显示注释,以便人们可以回复每条评论,然后这些评论将保持相互联系。
这是我的MySQL评论表:
comment_id comment item_id replied_to_id time
1 hello1 1 1 1:00pm
2 hello2 1 1 2:00pm
3 hello3 1 3 3:00pm
4 hello4 2 4 4:00pm
5 hello5 1 2 2:00pm
6 hello6 1 3 6:00pm
item_id
是一个列,表示评论正在讨论的父项目。
如果我使用item_id=1
从我的数据库中提取所有评论,那么我不确定如何对其进行处理,以使comment_id
和replied_to_id
匹配得恰当。例如,comment_id=2
应与comment_id=1
匹配。
这是我的PHP:
<?foreach($comments as $row){
if($row->comment_id==$row->replied_to_id){
echo $row->comment."-".$row->time; //desired output: hello1-1:00pm
foreach($comments as $sub_row){
if($row->comment_id!=$sub_row->replied_to_id){
echo $sub_row->comment."-".$sub_row->time;// desired output: hello2-2:00pm
foreach($comments as $sub_sub_row){
if($row->comment_id!=$sub_sub_row->replied_to_id){
echo $sub_sub_row->comment."-".$sub_sub_row->time;// desired output: hello5-5:00pm
}
}
}
}
}
else{
echo $row->comment."-".$row->time; // desired output: hello3-3:00pm
}
}
这看起来不错。必须有更好的方法来做到这一点。
答案 0 :(得分:1)
简单的演示,不一定是最优的,但有效:
function displayComments(array $comments, $parentId = null) {
foreach ($comments as $comment) {
if ($comment['replied_to_id'] == $parentId) {
echo $comment['comment'];
displayComments($comments, $comment['id']);
}
}
}
这假设顶级评论没有replied_to_id
(null
)。回复1
的评论1
的示例没有多大意义。