php使用子项循环未定义的项目大小

时间:2013-04-27 15:04:23

标签: php arrays loops

作为一个例子,我在网站中有这个页面的页面结构。问题是我必须在下拉列表中获取这些项目,但他们必须根据他们的父母打算。

  • loadSubItems(id)返回id的子项。
  • loadSubItems(0)将从根提供子项,在本例中为9,16,20
  • loadSubItems(9)将给出一个空数组loadSubItems(16)将返回17,18,19

问题是中间循环(foreach)必须继续循环,只要有该级别的子项目,打印它们,并且对于每个级别,必须添加额外的意图“_”。

我一直在努力解决这个问题几个小时,我已经失去了思想,我似乎无法弄清楚能够做到这一点会发生什么。

欢迎任何帮助!提前致谢:

下面的测试数据:

https://dl.dropboxusercontent.com/u/10123290/structuur.png

我正在使用以下代码进入第二级:

    $items = loadSubItems(0); // returns 9 16 20
    $intend = "";
    foreach($items as $item) {
        $subitems = loadSubItems($item); 
        if(count($subitems) > 0) {
            echo $intend.$item." has subitems: <br />";
            $intend .= "_";
            foreach($subitems as $subitem) {
                echo $intend.$subitem."<br />";
            }
        } else {
            echo "<br />".$item." has no subitems <br />";
        }
    }

此代码有输出:

9 has no subitems 
16 has subitems: 
_17
_18
_19

20 has no subitems 

编辑:所以我想要的结果是:

9 has no subitems 
16 has subitems: 
_17
__21
___22
__23
___24
_18
_19

20 has no subitems

1 个答案:

答案 0 :(得分:2)

看看我写的这个小功能。它完全符合您的需要..这是递归方法。您可以查看任何级别。

<?php
function arrayRec($array, $intent) {
    $intent .= "_";
    foreach($array as $key=>$value) {
        echo $intent.$key."</br>";
        arrayRec($value, $intent);
    }   
}
$tree = array("1" => array("11" => array(), "12" => array(), "13" => array()), "2" => array(), "3" => array("31" => array("311" => array()), "32" => array()), "4");
arrayRec($tree);
?>

这导致类似:

_1
__11
__12
__13
_2
_3
__31
___311
__32
_4