PHP中的递归问题

发布于 2024-08-30 01:25:32 字数 1305 浏览 4 评论 0原文

我需要从给定的 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>

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

I need to create a valid xml from a given array();

My Method looks like this,

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

if i execute the above i just get keys with empty values;

like

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

What i need is if i pass this array("name"=>"test","value"=>array("test1"=>33,"test2"=>40));

that it return this

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

Where is the error what did i wrong in the above recursion?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

你如我软肋 2024-09-06 01:25:32

你忘了“其他”:

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

You forgot the "else":

 if(is_array($value)) {
      $xml .= $this->array2Xml($value);
 } else {
      $xml .= $value;
 }
_蜘蛛 2024-09-06 01:25:32

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

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

You never placed the values into the code; your recursion is OK, you just missed the all-important step of supplying the data. Try this on for size:

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");
        }
    }
爱本泡沫多脆弱 2024-09-06 01:25:32

或许

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

Maybe

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

?

九歌凝 2024-09-06 01:25:32

你错过了一件事,在检查 $value 是否为数组后,你需要添加 else
否则 $xml .= $value;

如果你明白我的意思

you are missing one thing, after your check if $value is array you need to add else
else $xml .= $value;

if you know what I mean

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文