この質問は必ずしもPHPやMongoDBに関連するものではありません。PHPでネストされた配列を取得するアルゴリズム
私はカテゴリのMongoDBデータベースを持っています。コレクションです。コレクション内のドキュメントが
今{
title : 'Parent 1',
cat_id : '_ABC1',
level : 1
}
{
title : 'Parent 2',
cat_id : '_ABC2'
level : 1
}
{
title : 'Child 1',
cat_id : '_ABC1_CEF1'
level : 2
}
{
title : 'Child 2',
cat_id : '_ABC1_CEF2'
level : 2
}
{
title : 'Child Child 1',
cat_id : '_ABC1_CEF1_GHI1'
level : 3
}
{
title : 'Child Child 2',
cat_id : '_ABC1_CEF1_GHI2'
level : 3
}
Nesting 以下のように見える、私はPHPでやりたいと、その私が使用しています次のアルゴリズムについては
$array = array(
array(
'title' => 'Parent 1',
'cat_id' => '_ABC1',
'sub' => array(
'title' => 'Child 1',
'cat_id' => '_ABC1_CEF1',
'sub' => array(
array(
'title' => 'Child Child 1',
'cat_id' => '_ABC1_CEF1_GHI1'
),
array(
'title' => 'Child Child 2',
'cat_id' => '_ABC1_CEF1_GHI2'
)
)
)
),
...
...
)
のようなネストされた配列(複数可)(入れ子のレベルを取得する取得されTと= N) (N深い配列がフェッチなければならない方法、イテレータを指示フェッチパラメータの数である)
$array_holder = array();
foreach(MongoGetLevel1Cats as $parent){
$parent['sub'] = array();
foreach(MongoGetLevel2Cats as $child){
$child['sub'] = array();
foreach(MongoGetLevel3Cats as $child_child){
$child_child['sub'] = array();
...
...
array_push($child['sub'], $child_child);
}
array_push($parent['sub'], $child);
}
array_push($array_holder, $parent);
}
Return $array_holder;
彼の機能は私に望みの結果を与えるだろうが、私は深いネストされたレベルを制御することはできない。入れ子にされたレベル100をフェッチする必要がある場合は、foreachループinsiderループを100回書く必要があります。また、私はこの戦略が良いかどうか賢明なパフォーマンスを知りません。
私たちはこれをより戦略的にどのように解決しているのでしょうか?おそらく&のforeachループでは、foreachループを入れ子にすることを伴わない組み合わせがありますか?
イムを探していたものであるならば、私に教えてください、しかし、あなたはそれを照会する場合、それは、配列を返すdoesntの? – DevDonkey
私は私の答えを編集しました、私はそれがあなたのためにここでうまくいくと信じています。 – Webeng
本当に木を自分で作る必要がありますか?単一の親のために1つのドキュメントを持っていれば、MongoDBから直接ネストされた構造体をフェッチすることができます。 –