这个问题不一定与PHP或MongoDB有关。
我有带有类别集合的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
}
嵌 套现在,我想在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;
因为这个函数会给我想要的结果,但我无法控制深度嵌套级别。如果必须获取 100 阶的嵌套级别,我必须为 foreach 循环编写 foreach 循环内部程序 100 次。我也不知道这种策略在性能方面是好是坏。
有人知道我们如何更具战略性地解决这个问题吗?也许与 for & foreach 循环组合在一起,不涉及嵌套 foreach 循环?
您可以使用回调函数。例如:
function add_two($result, $how_many_times)
{
$result = $result + 2;//adds 2
echo "current =".$result."<br>";
$how_many_times--;
if ($how_many_times>0)
{
$result = add_two($result, $n);
}
return $result;
}
$resultVar = add_two(5, 5);//should give 15...
echo "resultvar = ".$resultVar."<br>";//outputs: resultvar = 15
在前面的示例中,我将相同的函数add_two()
放在自身内部,并创建了一个条件,用于查看我想要的迭代次数。每次迭代一次,我都会从$how_many_times
中减去 1 个值。一旦$how_man_times == 0
,add_two()
函数将不再被调用,结果将得到。
同样,您可以对代码执行相同的操作。如果你可以在它内部调用它,你就没有理由不得不重新编写相同的函数。
让我知道这是否是您要找的:)