递归php函数,将嵌套数组转换为嵌套的html块

时间:2009-11-19 22:21:27

标签: php recursion multidimensional-array

我正在寻找一个递归的php函数,它会调用一个函数来生成嵌套的HTML块(不一定只有DIV)。例如,对于以下数组:

$a = array(
    'b' => 'b value',
    'c' => 'c value',
    'd' => array(
        'd1' => array(
            'd12' = 'd12 value'
        ),
        'd2' => 'd2 value'
    ),
    'e' => 'e value'
);

以及以下功能

function block( $key ) {
    return '<div>'.$key.'</div>';
}

会导致

<div>
    key - b
</div>
<div>
    key - c
</div>
<div>
    key - d
    <div>
        key - d1
        <div>
            key - d12
        </div>
    </div>
    <div>
        key - d2
    </div>
</div>
<div>
    key - e
</div>

6 个答案:

答案 0 :(得分:7)

请原谅粗略的格式和非常粗略的缩进方式,但它应该按照您上面的格式工作。注意使用in_array(...)

<强> CODE

nestdiv($a);

function nestdiv($array, $depth = 0) {
    $indent_str = str_repeat(" ", $depth);

    foreach ($array as $key => $val) {
        print "$indent_str<div>\n";
        print "${indent_str}key - $key\n";
        if (is_array($val))
            nestdiv($val, ($depth+1));
        print "$indent_str</div>\n";
    }
}

<强>输出

<div>
key - b
</div>
<div>
key - c
</div>
<div>
key - d
    <div>
    key - d1
        <div>
        key - d12
        </div>
    </div>
    <div>
    key - d2
    </div>
</div>
<div>
key - e
</div>

答案 1 :(得分:1)

怎么样

<pre>
<?php print_r($myArray); ?>
</pre>

答案 2 :(得分:0)

function divArray($array){
    foreach($array as $key => $value){
       echo "<div>";
       echo $key;
       if(is_array($value)){
          divArray($value);
       }
       else{
         echo "$value";
      }
       echo "</div>";
  }
}

答案 3 :(得分:0)

function block($a) {
    $ret = '<div>';
    if(is_array($a)) {
        foreach($a as $k => $v)
            $ret .= block($v); 
    } else {
        $ret .= $a;
    }
    $ret .= '</div>';
    return $ret;
}   

答案 4 :(得分:0)

function block($array)
{
    $s = '';
    foreach ($array as $key=>$value)
    {
        $s .= '<div>' . $key ;
        if (is_array($value))
            $s .= block($value);
        else
            $s .= $value;
        $s .= '</div>';
    }
    return $s;
}
echo block($a);

答案 5 :(得分:0)

其他答案没有考虑到他希望能够将block()函数作为参数:

function toNested($array, $blocFunc) {
    $result = '';

    foreach ($array as $key => $value) {
        if is_array($value)
            $nestedElement = toNested($value, $blocFunc);
        else
            $nestedElement = $blocFunc($key)

        $result .= $nestedElement;
    }

    return $result;
}

echo toNested($a, 'block');