PHP动态创建嵌套元素

时间:2014-07-19 18:20:29

标签: php dynamically-generated multidimensional-array

我正在使用各种表从查询创建一个数组,这些表为我提供了可变数量的父项,每个父项都包含可变数量的值。

为简单起见,请说我有以下内容(使用p作为父级,使用v作为值):

$parent[0] = array("p1v1","p1v2");  
$parent[1] = array("p2v1","p2v2","p2v3");  
$parent[2] = array("p3v1","p3v2");

我需要创建以下树:

  • P1V1
    • P2V1
      • p3v1
      • p3v2
    • P2V2
      • p3v1
      • p3v2
    • p2v3
      • p3v1
      • p3v2
  • p1v2
    • P2V1
      • p3v1
      • p3v2
    • P2V2
      • p3v1
      • p3v2
    • p2v3
      • p3v1
      • p3v2

嵌套的foreach循环:

foreach ($parent[0] as $key1 => $value1) {
    echo $value1 . '<br />';
    foreach ($parent[1] as $key2 => $value2) {
        echo '-- ' . $value2 . '<br />';
        foreach ($parent[2] as $key3 => $value3) {
            echo '---- ' . $value3 . '<br />';
        }
    }
}

我可以使用上面嵌套的foreach循环执行此操作,但我的问题是我不知道对于给定查询我将拥有多少父母。那么,我怎样才能创建可变数量的嵌套foreach循环......我相信有更好的方法。

感谢您的任何意见和建议。

1 个答案:

答案 0 :(得分:2)

$parent[0] = array("p1v1","p1v2");  
$parent[1] = array("p2v1","p2v2","p2v3");  
$parent[2] = array("p3v1","p3v2");

function print_nested_array($parent,$level=0) {
    foreach($parent[$level] as $value) {        
        if($level > 0) {
            foreach(range(0,$level-1) as $j) {
                echo '--';
            }

            echo ' ';
        }            

        echo $value . "\n"; //change to "<br>" for html

        if($level < count($parent)-1)
            print_nested_array($parent,($level+1));
    }
}

print_nested_array($parent,0);

Demo