gpt4 book ai didi

php - 层级评论系统php

转载 作者:可可西里 更新时间:2023-11-01 06:31:31 24 4
gpt4 key购买 nike

我想做 discus/reddit/之类的评论系统,我的评论数据库中有一个“id_answer”(默认设置为 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

然后你应该预先解析你的数组以将子评论提供给他们的 parent ,并使用递归显示来显示每个评论及其子列表。

例如:

// 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, 'parent' => 0, 'childs' => array()),
2 => array('id' => 2, 'parent' => 0, 'childs' => array()),
10 => array('id' => 10, 'parent' => 0, 'childs' => array()),
// and some childs
3 => array('id' => 3, 'parent' => 1, 'childs' => array()),
6 => array('id' => 6, 'parent' => 2, 'childs' => array()),
4 => array('id' => 4, 'parent' => 2, 'childs' => array()),
7 => array('id' => 7, 'parent' => 3, 'childs' => array()),
8 => array('id' => 8, 'parent' => 7, 'childs' => array()),
9 => array('id' => 9, 'parent' => 6, 'childs' => array()),
);
*/

// 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 等留给你,因为它不会造成任何问题。

关于php - 层级评论系统php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7730889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com