php 在不使用递归的情况下检索一个对象中的所有嵌套回复 (laravel)

php retrieve all nested replies in one object without using recursion (laravel)

我有如下嵌套回复:

comment
-reply1
--reply3
---reply4
----reply5
-reply2
--reply6

我的模型中有这个功能

return $this->hasMany(self::class, 'parentid', 'postid')
        ->visible()
        ->with('replies');

我写了这段代码来获得所有回复

 foreach($replies as $reply){
        if(!empty($reply->replies)){
            foreach($reply->replies as $re){
                $replies->push($re);
            }
        }
    }

  return $replies;

此代码可以获得以下回复:{reply1,reply2,reply3,reply6} 即使有更深层次的回复,我如何在不使用递归的情况下检索所有回复???

您可以使用队列而不是递归。

  1. 将您的所有回复推送到队列。
  2. 从队列中取出一个回复。
  3. 如果它有更深的回复,那么你将更深的回复推入队列。
  4. 您重复步骤 2 和步骤 3。直到队列为空。

编辑: 我不熟悉php,但它应该告诉你如何使用队列。

$queue = $replies;
$allReplies = array();
while($queue) {
    $reply = array_shift($queue);
    $allReplies[] = $reply;
    if(!empty($reply->replies)){
        foreach($reply->replies as $re){
            $queue[] = $re;
        }
    }
}