我正在寻找一个递归的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>
答案 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');