ここに2つの質問があります。なぜこうなった?そして、それについて何ができるでしょうか?
申し訳ありませんが、質問は非常に長いですが、ほとんどは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]
ありがとう!