所以我正在编写一个带有嵌套回复的评论系统。我已经将存储和检索部分关闭了,最后得到了一个注释对象数组,每个注释对象都有一个回复属性,它本身就是一个注释对象数组。
允许的最大深度为3 - 或回复回复。
我正在寻找一个适当有效的替代三个嵌套循环来显示注释,或循环遍历顶层,然后循环遍历他们的回复,然后循环遍历他们的回复,因为这是不可扩展的。
好的,所以我被要求提供一些代码:
class Comment{
public $replies = array();
public $content;
}
因此注释对象包含一个回复数组,这些回复本身就是注释对象。这有三层深,所以我有一个顶级注释数组,每个注释都包含一个回复数组,每个回复都包含一个回复数组。
我想找到一个优于此的解决方案,因为它出现在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
}
}
}
答案 0 :(得分:2)
首先,您的代码的运行时间不是O(n^3)
,而是O(total number of replies)
,因为它将遍历所有回复一次(循环不是从{{1}运行} 1
,它们是foreach循环,它们执行的迭代次数取决于数组的大小。)
执行此任务没有更好的运行时间,因为您希望对每个回复执行某些操作,因此此任务的下限为n
。
我会做的是重写代码并使用递归函数,因为您的代码对更改不是很灵活,如果有一天您决定允许4个级别的回复,那么您将会这样做必须重写这段代码,而如果你使用递归,你就不会。
就像我说的那样,预计不会提高性能,而只是一种更好的做法。