这个问题不一定与PHP或MongoDB有关。
我有一个带有类别集合的MongoDB数据库。内部集合中的文档如下所示
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
Nesting 现在,我想在PHP中做的是获取像
这样的嵌套数组{
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
}
为此我使用以下算法(获取嵌套级别= N) (N是一个提取参数编号,告诉迭代器,必须获取多深的数组)
$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'
)
)
)
),
...
...
)
由于此函数将为我提供所需的结果,但我无法控制深层嵌套级别。如果必须获取100阶的嵌套级别,我必须编写foreach循环内部foreach循环100次。此外,我不知道这种策略是好还是不好。
有没有人知道我们如何更具战略性地解决这个问题?也许与for& foreach循环组合,不涉及嵌套foreach循环?
答案 0 :(得分:0)
您可以使用回调功能。例如:
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()
函数,并且将获得结果。
同样,您可以对代码执行相同的操作。如果您可以在内部调用它,则没有理由再次重写相同的函数。
如果您正在寻找,请告诉我们。)