出于某种原因,使用
concat
或
merge
当调用递归时,将不起作用。所以解决方案很简单,将递归产生的集合赋给一个变量,并使用
push
方法,这将解决问题。
/**
* Devuelve una colección de preguntas en orden
*
* @param \Illuminate\Support\Collection $list
* @param int $prev
*
* @return \Illuminate\Support\Collection
*/
public function getOrdenPreguntas( $listado, $prev = 0 ){
$result = collect();
$preguntas = $listado->filter( function( $item ) use ( $prev ){
return $item->datos[ 'prev' ] == $prev;
} );
$listado = $listado->diff( $preguntas );
if( $preguntas->count() > 0 ){
foreach( $preguntas as $pregunta ){
$result->push( $pregunta );
if( $listado->count() > 0 ){
$extras = $this->getOrdenPreguntas( $listado, $pregunta->id );
foreach( $extras as $extra ){
$result->push( $extra );
}
}
}
}
return $result;
}