- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在获取博客文章的所有评论,我还通过使用具有以下功能的引用将它们放在树结构中:
public function getComments($articleID) {
$sql = "SELECT * FROM comments WHERE articleid = $articleID";
$database = DatabaseFactory::getFactory()->Connect();
$stmt = $database->query($sql);
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
if($res!=NULL)
{
$references = array();
$tree = array();
foreach ($res as $id=> &$node) {
// Use id as key to make a references to the tree and initialize it with node reference.
$references[$node['comment_id']] = &$node;
// Add empty array to hold the children/subcategories
$node['children'] = array();
// Get your root node and add this directly to the tree
if ($node['comment_respond_to']==0) {
$tree[$node['comment_id']] = &$node;
} else {
// Add the non-root node to its parent's references
$references[$node['comment_respond_to']]['children'][$node['comment_id']] = &$node;
}
}
return $tree;
当我 print_r($tree);
这是输出;
Array
(
[1] => Array
(
[comment_id] => 1
[articleid] => 1
[user_id] => 2
[comment_comment] => First comment.
[comment_date] => 2016-03-10 20:06:43
[comment_respond_to] => 0
[children] => Array
(
[2] => Array
(
[comment_id] => 2
[articleid] => 1
[user_id] => 1
[comment_comment] => First comment, first child.
[comment_date] => 2016-03-10 20:06:43
[comment_respond_to] => 1
[children] => Array
(
)
)
[4] => Array
(
[comment_id] => 4
[articleid] => 1
[user_id] => 1
[comment_comment] => First comment, second child.
[comment_date] => 2016-03-10 20:06:43
[comment_respond_to] => 1
[children] => Array
(
)
)
)
)
[3] => Array
(
[comment_id] => 3
[articleid] => 1
[user_id] => 2
[comment_comment] => Second comment.
[comment_date] => 2016-03-10 20:06:43
[comment_respond_to] => 0
[children] => Array
(
[6] => Array
(
[comment_id] => 6
[articleid] => 1
[user_id] => 1
[comment_comment] => Second comment, first child.
[comment_date] => 2016-03-10 20:06:43
[comment_respond_to] => 3
[children] => Array
(
)
)
)
)
)
一切都很完美。
是时候回显了。
我想要的输出:
- First Comment
- First comment, first child.
- First comment, second child.
- Second Comment
- Second comment, first child.
所以,我知道我的下一步应该是使用 foreach 创建循环并获取评论。
我将 return $tree;
替换为;
foreach ($tree as $key) {
echo '<li>'.$key["comment_comment"], '</li>';
}
输出;
- First Comment
- Second Comment
缺少子评论。我知道我的下一步应该是在当前 foreach 内部创建另一个 foreach 以获取子评论,但我不知道该怎么做。
感谢任何帮助。
最佳答案
一个简单的解决方案是使用 recursion ,例如
<?php
$comments = data();
foo($comments);
function foo($arr, $level=0) {
$prepend = str_repeat(' ', $level); // <- the $level thingy is not necessary; it's only in here to get a bit prettier output
echo $prepend, '<ul>', PHP_EOL;
foreach($arr as $comment) {
echo $prepend, ' <li>', $comment['comment_date'], ' ', htmlentities($comment['comment_comment']), PHP_EOL;
if ( !empty($comment['children']) ) {
foo($comment['children'], $level+1); // recurse into the next level
}
echo $prepend, ' </li>', PHP_EOL;
}
echo $prepend, '</ul>', PHP_EOL;
}
function data() {
return array (
1 =>
array (
'comment_id' => 1,
'articleid' => 1,
'user_id' => 2,
'comment_comment' => 'First comment.',
'comment_date' => '2016-03-10 20:06:43',
'comment_respond_to' => 0,
'children' =>
array (
2 =>
array (
'comment_id' => 2,
'articleid' => 1,
'user_id' => 1,
'comment_comment' => 'First comment, first child.',
'comment_date' => '2016-03-10 20:06:43',
'comment_respond_to' => 1,
'children' =>
array (
),
),
4 =>
array (
'comment_id' => 4,
'articleid' => 1,
'user_id' => 1,
'comment_comment' => 'First comment, second child.',
'comment_date' => '2016-03-10 20:06:43',
'comment_respond_to' => 1,
'children' =>
array (
14 =>
array (
'comment_id' => 14,
'articleid' => 1,
'user_id' => 99,
'comment_comment' => 'Comment to second child of First comment.',
'comment_date' => '2016-03-10 20:19:43',
'comment_respond_to' => 4,
'children' =>
array (
),
),
),
),
),
),
3 =>
array (
'comment_id' => 3,
'articleid' => 1,
'user_id' => 2,
'comment_comment' => 'Second comment.',
'comment_date' => '2016-03-10 20:06:43',
'comment_respond_to' => 0,
'children' =>
array (
6 =>
array (
'comment_id' => 6,
'articleid' => 1,
'user_id' => 1,
'comment_comment' => 'Second comment, first child.',
'comment_date' => '2016-03-10 20:06:43',
'comment_respond_to' => 3,
'children' =>
array (
),
),
),
),
);
}
打印
<ul>
<li>2016-03-10 20:06:43 First comment.
<ul>
<li>2016-03-10 20:06:43 First comment, first child.
</li>
<li>2016-03-10 20:06:43 First comment, second child.
<ul>
<li>2016-03-10 20:19:43 Comment to second child of First comment.
</li>
</ul>
</li>
</ul>
</li>
<li>2016-03-10 20:06:43 Second comment.
<ul>
<li>2016-03-10 20:06:43 Second comment, first child.
</li>
</ul>
</li>
</ul>
关于php - 如何构建评论的树结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35984148/
我正在使用评论系统,现在,我想重写 url 评论的片段并附加一个符号#,我想将页面部分移动到评论列表,正好是最后一个评论用户,带有 username 我在发表评论时使用 next 重定向用户: {
这个问题在这里已经有了答案: "Rate This App"-link in Google Play store app on the phone (21 个回答) 关闭2年前。 有没有一种方法可以要
长期潜伏者第一次海报... 我们正在使用 Facebook 的 API 将其集成到我们的网络应用程序中,并且我们能够通过 {page-id}/ratings 部分中的 {open_graph_stor
我正在尝试让 Visual Studio 2012 自动格式化我的评论 block ,就像它对我的 C# block 所做的那样。我希望我的评论看起来像这样: /* * Here is my C#
在 MySQl 中创建表时对每个字段进行注释是否会影响性能?我正在处理一个包含 1000 多个表的数据库,几乎每个表中的每个字段都有注释。我只是想知道这是否会以任何方式影响 MySQL 的性能? 最佳
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
这个问题在这里已经有了答案: SQL select only rows with max value on a column [duplicate] (27 个答案) 关闭 5 年前。 我这里有 2
如何在评论中正确编写 --> 或 -->? 我正在维护一个包含许多小程序代码条目的大型 html 文件。说: a --> b. 我在 HTML 中将其编码为 -->: a --> b. 但是,我
这是一个简单的问题。有没有办法允许用户直接在我的应用程序中输入评论和/或评级,并将这些数据发回 Android Market?如果是这样,如果我使用 EditText View 允许用户输入,代码会是
注释是否表示代码中带有//或/* */的注释? 最佳答案 不,注释不是评论。使用语法 @Annotation 将注释添加到字段、类或方法。最著名的注解之一是@Override,用于表示方法正在覆盖父类
我有一个包含两个模型的 Django 应用程序:第一个是 django.contrib.auth.User,第二个是我创建的 Product。 我会为每个产品添加评论,因此每个注册用户都可以为每个产品
有没有办法评论多行......其中已经有一些评论? 即 ... Hello world! Multi-line comment end --> 看来连
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: obj.nil? vs. obj == nil 现在通过 ruby koans 工作,发现这个评论嵌入在
这是一个基本问题 .gemrc 文件中是否允许注释? 如果是,你会怎么做? 我这里查了没用 docs.rubygems.org/read/chapter/11 最佳答案 文档说:The config
有没有办法在 SASS 中添加 sass-only 注释?你知道,所以输出 .css 文件没有那些注释 例如, /* global variables */ $mainColor: #666; /*
我想搜索在任何媒体上发布的评论中的任何特定关键字或几个关键字的组合。我的要求是在 API 的帮助下获取包含该关键字的评论。我浏览了 Instagram API 的文档,发现只能通过哈希标签进行搜索,而
在 WordPress 中,您可以在页面加载之前执行以下操作来编辑文章的内容: add_filter('the_content', 'edit_content'); function edit_con
在指示要合并的内容时, checkin 合并的最佳方法是什么?我已经说过 10 个变更集我正在从我的主分支合并到一个发布分支。每一个都包含我在 checkin 主分支时写的详细注释。现在,当我合并时,
我知道如何查询常规网站的社交参与度计数。可以使用Facebook图形浏览器(https://developers.facebook.com/tools/explorer/)或throug api轻松实
我正在尝试从 YouTube 视频中获得特定评论。例如,我想从 YouTube 视频的第 34 条评论中获取详细信息。有谁知道在不阅读所有评论列表的情况下我该怎么做? 或者,如果没有任何解决方案可以仅
我是一名优秀的程序员,十分优秀!