Проблема рекурсии в PHP - PullRequest
1 голос
/ 22 апреля 2010

Мне нужно создать действительный 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 ]

5 голосов
/ 22 апреля 2010

Вы забыли "остальное":

 if(is_array($value)) {
      $xml .= $this->array2Xml($value);
 } else {
      $xml .= $value;
 }
3 голосов
/ 22 апреля 2010

Вы никогда не помещали значения в код;с вашей рекурсией все в порядке, вы просто пропустили важнейший этап предоставления данных.Попробуйте это для размера:

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 голосов
/ 22 апреля 2010

Может

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

1 голос
/ 22 апреля 2010

вам не хватает одной вещи, после проверки, что $ value является массивом, вам нужно добавить еще иначе $ xml. = $ value;

если вы понимаете, о чем я

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...