私はこのような配列を持っています
array(
1 => array(
'id' => 1,
'name' => 'first',
'parent' => null
),
2 => array(
'id' => 2,
'name' => 'second',
'parent' => null
),
3 => array(
'id' => 3,
'name' => 'third',
'parent' => 1
),
4 => array(
'id' => 4,
'name' => 'fourth',
'parent' => 3
),
5 => array(
'id' => 5,
'name' => 'fifth',
'parent' => 1
),
);
しかし、「子」アイテムを配列の下の「子」キーに移動したいと思います。だから、私はで終わりたいです
array(
1 => array(
'id' => 1,
'name' => 'first',
'parent' => null,
'children' => array(
3 => array(
'id' => 3,
'name' => 'third',
'parent' => 1,
'children' => array(
4 => array(
'id' => 4,
'name' => 'fourth',
'parent' => 3,
'children' => array()
),
)
),
5 => array(
'id' => 5,
'name' => 'fifth',
'parent' => 1,
'children' => array()
)
)
),
2 => array(
'id' => 2,
'name' => 'second',
'parent' => null,
'children' => array()
)
);
しかし、正直なところ、どこから始めればよいかまったくわかりません。
配列内の各項目をループしてから、新しい配列を構築することを考えていました$new_array[$current['parent']]['children'][$current['id']] = $current;
しかし、ネストされたアイテムにヒットするとすぐに問題が発生します。
現在の配列と配列全体を受け取り、再帰的にツリーを上に移動してすべての親、したがってパス全体を見つける関数を作成できますが、親の 1 つがまだ作成されていない場合、再び問題が発生します。
私が考えることができる唯一のオプションは、さまざまなレベルの親の配列マップを作成し、それを再帰的にループして、すべての要素をそのように取得することですが、それはやや非効率的ですか?
誰でも解決策を提案できますか?