【发布时间】:2014-03-13 14:57:36
【问题描述】:
所以我正在编写一个带有嵌套回复的评论系统。我已经完成了存储和检索部分,最后得到了一组评论对象,每个对象都有一个回复属性,它本身就是一组评论对象。
我允许的最大深度是 3 - 或对回复的回复。
我正在寻找一个适当有效的替代三个嵌套循环来显示 cmets,或者循环通过顶层,然后循环通过他们的回复,然后循环通过他们的回复,因为这是不可扩展的。
好的,所以有人要求我提供一些代码:
class Comment{
public $replies = array();
public $content;
}
所以一个评论对象包含一个回复数组,这些回复本身就是评论对象。这深入了三层,所以我有一个顶级 cmets 数组,每个包含一个回复数组,每个回复包含一个回复数组。
我想找到一个比这更好的解决方案,因为我相信它的结果是 O(n^3):
foreach($comments as $c){
//do some stuff to display the comment here
foreach($c->replies as $r){
//do some stuff to display the replies here
foreach($r->replies as $rr){
//do some stuff to display replies to replies here
}
}
}
【问题讨论】:
-
为了获得一个合格答案的远程机会,我认为您必须发布一些代码 - 比如那些“三个嵌套循环”的示例.. :)跨度>
-
@davidkonrad - 已修复,请参阅添加的代码。
-
您的
comments和replies和replies to replies是否保存在mysql 表中?如果是,我是否建议使用 JOIN 查询。 -
@Jhn - 我不确定这对我的问题有什么帮助?连接查询不是如何有效循环遍历树数据结构的解决方案...
-
那么对于您正在寻找的解决方案,您希望整个评论链同时加载到内存中吗?不像是根据请求检索回复的延迟加载。