Ходьба по дереву в ширину при ошибке Symfony

В Symfony (3.4) я установил древовидную структуру в многомерном массиве с 3 слоями узлов, последний из которых является листовым. Моя проблема возникает в попытке настроить функцию обхода дерева в ширину в качестве службы:

<?php
namespace AppBundle\Service;
use AppBundle\Service\TreeBuilder;

class TreeBuilder {
//...

$public function outputTree($tree, $level = 0, &$markup = ''){
$queue = new \SplQueue();
if($level == 0){
//Building a select menu with the tree
$markup .= '<select>';
}
foreach ($tree as $node){
if(!isset($node['children'])){
$markup .= '<option>'.str_repeat("&emsp;", $level).$node['title'].'</option>';
}
elseif(isset($node['children'])){
$queue->enqueue();
}
}
//Only once done with echoing leaf nodes, then move on to the queue
while ($queue->count()){
$dump = $queue->dequeue();
$markup .= '<option>'.str_repeat("&emsp;", $level).$dump['title'].'</option>';
$markup .= $this->outputTree($dump['children'], $level + 1, $markup);
}
return $markup;
}
}

Теперь, когда я пытаюсь использовать службу в моем контроллере (и, наконец, объединить с '</select>') Я получаю OutOfMemoryException именно из-за строки:

$markup .= $this->outputTree($dump['children'], $level + 1, $markup);

Когда я пытаюсь рекурсии с помощью echo вместо разметки $ все классы располагаются в соответствии с ожиданиями (сначала родители «уровня 0», затем их дочерние узлы, потом их дочерние узлы, а затем эти конечные узлы).

Есть ли у вас какие-либо предложения относительно того, чего мне не хватает, чтобы заставить его работать при возврате разметки как переменной?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …