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}
即使有更深层次的回复,我如何在不使用递归的情况下检索所有回复???
您可以使用队列而不是递归。
- 将您的所有回复推送到队列。
- 从队列中取出一个回复。
- 如果它有更深的回复,那么你将更深的回复推入队列。
- 您重复步骤 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;
}
}
}
我有如下嵌套回复:
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} 即使有更深层次的回复,我如何在不使用递归的情况下检索所有回复???
您可以使用队列而不是递归。
- 将您的所有回复推送到队列。
- 从队列中取出一个回复。
- 如果它有更深的回复,那么你将更深的回复推入队列。
- 您重复步骤 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;
}
}
}