我有以下数组。我需要创建一个从这种类型的数组构建HTML的函数。我尝试过递归,但在某些地方,我的逻辑中存在错误。请帮忙......
$arr = array(
'div' => array
(
0 => "Sample text sample text sample text.",
1 => array(
'ul' => array
(
'li' => Array
(
0 => "li 0 text.",
1 => "li 1 text.",
2 => "li 2 text."
)
)
)
)
);
所需的HTML输出是:
<pre>
<div>Sample text sample text sample text.</div>
<div>
<ul>
<li>li 0 text.</li>
<li>li 1 text.</li>
<li>li 2 text.</li>
</ul>
</div>
</pre>
我创建了以下功能:
echo parseHTML($arr, '<div>');
function parseHTML($arr, $parentKey) {
static $str = "";
foreach ($arr as $key => $value) {
if (is_array($value)) {
if (is_numeric($key)) {
parseHTML($value, $parentKey);
} else {
parseHTML($value, $key);
}
} else if (is_numeric($key)){
$str .= '<'.$parentKey.'>'.$value .'</' . $parentKey . '>';
} else {
$str .= '<'.$key.'>'.$value .'</' . $key . '>';
}
}
return $str;
}
我得到以下输出:
<div>Sample text sample text sample text.</div>
<li>li 0 text.</li>
<li>li 1 text.</li>
<li>li 2 text.</li>
答案 0 :(得分:3)
这与@ MaggsWeb的解决方案完全相同,但无论如何我发布它:)
function printHtml($key, $value) {
if(!is_array($value) && is_numeric($key)) {
echo $value;
} else {
foreach($value as $k => $v) {
if(is_numeric($key)) {
printHtml($k, $v);
} else {
echo "<$key>";
printHtml($k, $v);
echo "</$key>";
}
}
}
}
echo '<pre>';
printHtml('p', $arr['p']);
echo '</pre>';
<强>更新强>
这是一个返回字符串的版本。
function getHtml($key, $value) {
$s = '';
if(!is_array($value) && is_numeric($key)) {
return $value;
} else {
foreach($value as $k => $v) {
if(is_numeric($key)) {
return getHtml($k, $v);
} else {
$s .= "<$key>".getHtml($k, $v)."</$key>";
}
}
}
return $s;
}
echo '<pre>'.getHtml('p', $arr['p']).'</pre>';
答案 1 :(得分:1)
这是一个递归函数,可以处理您的数组和输出,如上例所示。它应该以相同的格式处理多个数组元素。
echo '<pre>';
output($arr);
echo '</pre>';
function output($array){
foreach ($array as $key => $value){
if(is_array($value)){
foreach ($value as $item){
if(is_array($item)){
foreach ($item as $k => $v){
echo "<$k>";
if(is_array($v)){
output($v); // recursive
}
echo "</$k>";
}
} else {
echo "<$key>$item</$key>";
}
}
}
}
}
修改,生成并返回一个字符串。
function outputString($array,$html=''){
foreach ($array as $key => $value){
if(is_array($value)){
foreach ($value as $item){
if(is_array($item)){
foreach ($item as $k => $v){
$html .= "<$k>";
if(is_array($v)){
$html .= outputString($v,$html);
}
$html .= "</$k>";
}
} else {
$html .= "<$key>$item</$key>";
}
}
}
}
return $html;
}
echo outputString($arr);
答案 2 :(得分:0)
我测试了这个:
function getHTML ($arr) {
$html="";
foreach ($arr as $a => $b) {
$html.="<pre><p>$b[0]</p>
<p><ul>";
foreach ($b[1] as $c => $d) {
foreach ($d as $e => $f) {
foreach ($f as $g) {
$html.="<li>$g</li>";
}
}
}
$html.="</ul></p>
</pre>";
}
return $html;
}
它获得了所需的html结构。但它并不漂亮。