层次结构评论系统php

前端之家收集整理的这篇文章主要介绍了层次结构评论系统php前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想做铁饼/ reddit /喜欢评论系统,我的评论数据库中有一个“id_answer”(由defaut设置为0)字段,当用户回答另一个评论时,该字段是父评论的“id”.

我有一个数组中的线程的注释,但我不知道如何过滤每个循环过滤器得到这样的东西:

comment lvl 1 ($array[id_answer] is 0)

——- comment lvl 2 ($array[id_answer] is id_of_level_one_comment)

————— comment lvl 3 …

数据库中使用三个字段;

>“id”,每个评论都是唯一的
>“parent_id”,它是0(顶级注释)或父注释的“id”
>“thread_id”,这是你评论内容的id

假设您要显示ID为“123”的新闻文章评论

mysql中选择时,使用此thread_id选择所有内容

SELECT id,parent FROM comments WHERE thread_id = 123

然后你应该预先解析你的数组,让孩子给他们的父母评论,并使用递归显示显示每个评论及其子列表.

举个例子:

// getting the comments from MysqL,I'm obvIoUsly not bothering
//   to check the return value,but in your code you should do it
$result = MysqLi_query("SELECT id,parent FROM comments WHERE thread_id = 123");

$comments = array();
while ($row = MysqLi_fetch_array($result)) {
  $row['childs'] = array();
  $comments[$row['id']] = $row;
}

// This is the array you get after your MysqL query
// Order is non important,I put the parents first here simply to make it clearer.
/*
$comments = array(
    // some top level (parent == 0)
    1 => array('id' => 1,'parent' => 0,'childs' => array()),5 => array('id' => 5,2 => array('id' => 2,10 => array('id' => 10,// and some childs
    3 => array('id' => 3,'parent' => 1,6 => array('id' => 6,'parent' => 2,4 => array('id' => 4,7 => array('id' => 7,'parent' => 3,8 => array('id' => 8,'parent' => 7,9 => array('id' => 9,'parent' => 6,);
*/

// now loop your comments list,and everytime you find a child,push it 
//   into its parent
foreach ($comments as $k => &$v) {
  if ($v['parent'] != 0) {
    $comments[$v['parent']]['childs'][] =& $v;
  }
}
unset($v);

// delete the childs comments from the top level
foreach ($comments as $k => $v) {
  if ($v['parent'] != 0) {
    unset($comments[$k]);
  }
}

// now we display the comments list,this is a basic recursive function
function display_comments(array $comments,$level = 0) {
  foreach ($comments as $info) {
    echo str_repeat('-',$level + 1).' comment '.$info['id']."\n";
    if (!empty($info['childs'])) {
      display_comments($info['childs'],$level + 1);
    }
  }
}

display_comments($comments);

这给出了以下结果:

- comment 1
-- comment 3
--- comment 7
---- comment 8
- comment 5
- comment 2
-- comment 6
--- comment 9
-- comment 4
- comment 10

我把ORDER BY等等留给你,因为它不应该造成任何问题.

原文链接:https://www.f2er.com/php/138410.html

猜你在找的PHP相关文章