将嵌套数组转换为嵌套 html 块的递归 php 函数
Posted
技术标签:
【中文标题】将嵌套数组转换为嵌套 html 块的递归 php 函数【英文标题】:Recursive php function that turns nested array into nested html blocks 【发布时间】:2010-12-18 12:41:22 【问题描述】:我正在寻找编写一个递归 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>
【问题讨论】:
您似乎没有在任何地方使用这些值(例如“b值”)。这是故意的吗? 为什么是这个社区维基?这是一个有效的编程问题。你正在失去代表! 【参考方案1】:请原谅粗略的格式和非常粗略的缩进方式,但它应该像你上面的格式那样工作。注意 in_array(...) 的使用
代码
nestdiv($a);
function nestdiv($array, $depth = 0)
$indent_str = str_repeat(" ", $depth);
foreach ($array as $key => $val)
print "$indent_str<div>\n";
print "$indent_strkey - $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>
【讨论】:
缩进的手感很好。 您可以更改 str_repeat(' ',$depth) 的第一个迭代器 是 in_array() 还是 is_array() ?【参考方案2】:怎么样
<pre>
<?php print_r($myArray); ?>
</pre>
【讨论】:
【参考方案3】: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】: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】:function divArray($array)
foreach($array as $key => $value)
echo "<div>";
echo $key;
if(is_array($value))
divArray($value);
else
echo "$value";
echo "</div>";
【讨论】:
只有在不是数组时才关闭 div。【参考方案6】:其他答案没有考虑到他希望能够将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');
【讨论】:
以上是关于将嵌套数组转换为嵌套 html 块的递归 php 函数的主要内容,如果未能解决你的问题,请参考以下文章