代码之家  ›  专栏  ›  技术社区  ›  streetparade

PHP中的递归问题

  •  1
  • streetparade  · 技术社区  · 14 年前

    我需要从给定的array()创建一个有效的XML;

    我的方法是这样的,

    protected function array2Xml($array)
        {
            $xml = "";
    
            if(is_array($array))
            {
                foreach($array as $key=>$value)
                {
                    $xml .= "<$key>";
    
                    if(is_array($value))
                    {
                        $xml .= $this->array2Xml($value);
                    }
                    $xml .= "</$key>";
                }
    
                return $xml;
            }
            else
            {
                throw new Exception("in valid");
            }
        }
    
    
    protected function createValidXMLfromArray($array,$node)
        {
            $xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';
    
            $xmlArray = $this->array2Xml($array);
    
            $xml .= "<$node>$xmlArray</$node>";
            return $xml;
        }
    

    如果我执行上面的操作,我只得到带有空值的键;

    喜欢

    <node>
    <name></name>
    </node>
    

    我需要的是如果我通过这个 array("name"=>"test","value"=>array("test1"=>33,"test2"=>40));

    把这个还给你

    <node>
    <name>test</name>
    <value>
    <test1>33</test1>
    <test2>40</test2>
    </value>
    </node>
    

    错误在哪里?我在上面的递归中犯了什么错误?

    4 回复  |  直到 14 年前
        1
  •  3
  •   Dereleased    14 年前

    您从未将值放入代码中;您的递归是正常的,您只是错过了提供数据的所有重要步骤。试试这个尺寸:

    protected function array2Xml($array)
        {
            $xml = "";
    
            if(is_array($array))
            {
                foreach($array as $key=>$value)
                {
                    $xml .= "<$key>";
    
                    if(is_array($value))
                    {
                        $xml .= $this->array2Xml($value);
                    }
                    else {
                        $xml .= $value;
                    }
                    $xml .= "</$key>\n";
                }
    
                return $xml;
            }
            else
            {
                throw new Exception("in valid");
            }
        }
    
        2
  •  5
  •   nickf    14 年前

    你忘了“其他”了:

     if(is_array($value)) {
          $xml .= $this->array2Xml($value);
     } else {
          $xml .= $value;
     }
    
        3
  •  2
  •   Tower    14 年前

    也许吧

    if(is_array($value))
    {
     $xml .= $this->array2Xml($value);
    }
    else
    {
     $xml .= $value;
    }
    

    ?

        4
  •  1
  •   Senad MeÅ¡kin    14 年前

    在检查$value是否为数组后,您缺少一件事,需要添加其他项。 else$xml.=$value;

    如果你知道我的意思