我发的一个贴子:
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总会出现无法实现的问题!

解决方案 »

  1.   


    $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);
      

  2.   

    楼主是不是想利用php数组来生成html标签?
     我有过这个想法. 因为在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的,递归原理和基本算法如此. 其他的太复杂不发了
      

  3.   

    <?php
    $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;
    ?>
      

  4.   

    如果需要写入文件,可以用PHP_EOL来换行
      

  5.   

    非常感谢所有回帖的朋友!
    真是惭愧呀!出去吃饭的功夫就有人做出来了!
    parse那个函数是可以的,convert好像少了一个<b>。
      

  6.   

    修改了一下:
    <?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);
    ?>