【问题标题】:Recursion Problem in PHPPHP中的递归问题
【发布时间】:2010-04-22 13:34:39
【问题描述】:

我需要从给定的 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"=&gt;"test","value"=&gt;array("test1"=&gt;33,"test2"=&gt;40));

它返回这个

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

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

【问题讨论】:

标签: php xml recursion


【解决方案1】:

你忘记了“其他”:

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

【讨论】:

  • 我不知道为什么,但我得到了空节点
  • @streetparade:这与 dereleased 的回答有什么不同?
【解决方案2】:

您从未将值放入代码中;您的递归没问题,您只是错过了提供数据的最重要步骤。试穿这个尺寸:

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");
        }
    }

【讨论】:

    【解决方案3】:

    也许

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

    ?

    【讨论】:

      【解决方案4】:

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

      如果你知道我的意思

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-18
        • 2011-11-21
        • 2011-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-04
        相关资源
        最近更新 更多