此問題不一定與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'
)
)
)
),
...
...
)
對於我使用下面的算法(取嵌套級別= 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;
爲t他的功能會給我想要的結果,但我無法控制深層嵌套。如果必須獲取訂單100的嵌套級別,我必須編寫foreach循環內部foreach循環100次。此外,我不知道這個策略的表現是否合理。
有誰知道我們如何解決這個更具戰略性的?也許與& foreach循環相結合,不涉及嵌套foreach循環?
林不熟悉MongoDB的行爲,但犯規如果您的查詢它返回一個數組? – DevDonkey
我編輯了我的答案,我相信它會在這裏爲你做好工作。 – Webeng
你真的要自己建樹嗎?如果你有一個單獨的父文檔,你可以直接從MongoDB獲取嵌套結構。 –