在PHP中获取嵌套数组的算法

时间:2016-04-23 10:57:02

标签: php arrays algorithm mongodb performance

这个问题不一定与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循环?

1 个答案:

答案 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()函数,并且将获得结果。

同样,您可以对代码执行相同的操作。如果您可以在内部调用它,则没有理由再次重写相同的函数。

如果您正在寻找,请告诉我们。)