我发的一个贴子:
http://topic.csdn.net/u/20100722/10/ae144d10-d5b7-412a-af49-60596ad4e09f.html?36304
现在需要实现这个功能:
将数组:
$test_arr = array(
"c" => "",
"a" => "test_a",
"b" => array("g"=>"test_g"),
);
转化成这样的字符串:
<c/>
<a>test_a</a>
<b>
<g>test_g</g>
</b>
说实话,几个小时,一点头绪也没有!我发现php递归函数中出现foreach总会出现无法实现的问题!
http://topic.csdn.net/u/20100722/10/ae144d10-d5b7-412a-af49-60596ad4e09f.html?36304
现在需要实现这个功能:
将数组:
$test_arr = array(
"c" => "",
"a" => "test_a",
"b" => array("g"=>"test_g"),
);
转化成这样的字符串:
<c/>
<a>test_a</a>
<b>
<g>test_g</g>
</b>
说实话,几个小时,一点头绪也没有!我发现php递归函数中出现foreach总会出现无法实现的问题!
$test_arr = array(
"c" => "",
"a" => "test_a",
"b" => array("g"=>"test_g"),
);function parse($array){
$str = '';
foreach($array as $key => $val){
if($val == ''){
$str .= "<".$key."/>";
}
else if(!is_array($val)){
$str .= "<".$key.">".$val."</".$key.">";
}
else{
$str .= "<".$key.">".parse($val)."</".$key.">";
}
}
return $str;
}echo parse($test_arr);
我有过这个想法. 因为在html标签里嵌入各种代码作为模板, 是不能复用的. 如果是数组型模板,修改,传递,复用就爽得不得了了. 而且试验成功了一半~现给出部分代码供参考:
function array_iterator($array){
foreach($array as $key=>$val) { $key="div id=\"$key\"";
$this->div.="<$key>";
$this->div.=is_array($val)?$this->array_iterator($val):$val;
list($key,)=explode(' ',$key);
$this->div.="</$key>";
}
} 这个只是生成div的,递归原理和基本算法如此. 其他的太复杂不发了
$test_arr = array(
"c" => "",
"a" => "test_a",
"b" => array("g"=>"test_g"),
);
$HTML = "";
function convert($array){
global $HTML;
foreach($array as $key => $value){
if(empty($value)){
$HTML .= "</".$key."><br>";
}else{
if(is_array($value)){
convert($value);
}else{
$HTML .= "<".$key.">".$value."</".$key."><br>";
}
}
}
}
convert($test_arr);
echo $HTML;
?>
真是惭愧呀!出去吃饭的功夫就有人做出来了!
parse那个函数是可以的,convert好像少了一个<b>。
<?php
$test_arr = array(
"c" => "",
"a" => "test_a",
"b" => array("g"=>"test_g"),
);
$HTML = "";
function convert($array){
foreach($array as $key => $value){
if(empty($value)){
$HTML .= "</".$key."><br>";
}else{
if(is_array($value)){
$HTML .= "<".$key.">".convert($value)."</".$key."><br>";
}else{
$HTML .= "<".$key.">".$value."</".$key."><br>";
}
}
}
return $HTML;
}
echo convert($test_arr);
?>