Два вопроса здесь действительно; почему это происходит? И что с этим можно сделать?
Извините, вопрос так долго, но в большинстве случаев это просто print_r
вывод!
По сути, я начинаю с плоского массива тегов ($tags
), каждый из которых имеет id
(индекс массива), name
и parent_id
. Затем я рекурсивно перебираю $tags
и вкладываю все дочерние теги в их родительский. (см. ниже)
Это работает! (см. ниже для вывода). Но проблема, с которой я столкнулся, заключается в том, что мой плоский массив тегов записывается внутри функции, которая выполняет вложение / рекурсию. (см. ниже)
Плоский массив тегов:
Array
(
[1] => stdClass Object
(
[name] => instruments
[parent_id] => 0
)
[2] => stdClass Object
(
[name] => strings
[parent_id] => 1
)
[3] => stdClass Object
(
[name] => violin
[parent_id] => 2
)
[4] => stdClass Object
(
[name] => cello
[parent_id] => 2
)
[5] => stdClass Object
(
[name] => woodwind
[parent_id] => 1
)
[6] => stdClass Object
(
[name] => flute
[parent_id] => 5
)
)
Это рекурсивно вызываемая функция для вложения дочерних тегов. Проблема внутри if
: я присваиваю $tag
$tree[$i]
, а затем добавляю к нему свойство children
. Это приводит к добавлению свойства children
к $tag
. Это то, что я хочу прекратить.
public function tags_to_tree($tags, $parent_id = 0)
{
$tree = array();
foreach($tags as $i => $tag)
{
// add this tag node and all children (depth-first recursive)
if(intval($parent_id) === intval($tag->parent_id))
{
$tree[$i] = $tag;
$tree[$i]->children = $this->tags_to_tree($tags, $i);
}
}
return $tree;
}
Вывод вложенных тегов:
Array
(
[1] => stdClass Object
(
[name] => instruments
[parent_id] => 0
[children] => Array
(
[2] => stdClass Object
(
[name] => strings
[parent_id] => 1
[children] => Array
(
[3] => stdClass Object
(
[name] => violin
[parent_id] => 2
)
[4] => stdClass Object
(
[name] => cello
[parent_id] => 2
)
)
)
[5] => stdClass Object
(
[name] => woodwind
[parent_id] => 1
[children] => Array
(
[6] => stdClass Object
(
[name] => flute
[parent_id] => 5
)
)
)
)
)
)
Что можно сделать по-другому при добавлении свойства children
к $tree[$i]
или при назначении $tag
для $tree[$i]
, чтобы это не происходило?
Спасибо!