Maison  >  Article  >  développement back-end  >  Quelle est la fonction pour convertir un tableau php en XML ?

Quelle est la fonction pour convertir un tableau php en XML ?

藏色散人
藏色散人original
2020-08-26 10:07:382350parcourir

La fonction de conversion des tableaux PHP en XML est "arr2xml". Comment l'utiliser : créez d'abord un exemple de fichier PHP ; puis définissez une méthode "arr2xml" puis utilisez l'instruction foreach et "preg_replace" et autres ; des fonctions pour convertir le tableau en XML suffisent.

Quelle est la fonction pour convertir un tableau php en XML ?

Recommandé : "Tutoriel vidéo PHP"

La nécessité de convertir des tableaux gagnants PHP en XML est courante, et Il existe de nombreuses méthodes d'implémentation. Baidu a recherché diverses méthodes d'implémentation, mais en gros, ils ont simplement emprunté certains composants, etc. J'ai moi-même écrit une méthode de regroupement de chaînes, qui prend en charge les tableaux multidimensionnels. À titre de référence seulement, n'hésitez pas à nous faire savoir s'il y a des défauts !

/**
*   将数组转换为xml
*    @param array $data    要转换的数组
*   @param bool $root     是否要根节点
*   @return string         xml字符串
*    @author Dragondean
*    @url    http://www.cnblogs.com/dragondean*/function arr2xml($data, $root = true){    $str="";    if($root)$str .= "<xml>";    foreach($data as $key => $val){        if(is_array($val)){            $child = arr2xml($val, false);            $str .= "<$key>$child</$key>";
        }else{            $str.= "<$key><![CDATA[$val]]></$key>";
        }
    }    if($root)$str .= "</xml>";    return $str;
}

Ce qui précède est la méthode d'implémentation. Le premier paramètre est le tableau que vous souhaitez convertir. Le deuxième paramètre facultatif définit s'il faut ajouter le nœud racine b2a0af5a8fd26276da50279a1c63a57a

Code de test :

$arr=array(&#39;a&#39;=>&#39;aaa&#39;,&#39;b&#39;=>array(&#39;c&#39;=>&#39;1234&#39; , &#39;d&#39; => "asdfasdf"));echo arr2xml($arr);

Le résultat après exécution du code est :

<xml><a><![CDATA[aaa]]></a><b><c><![CDATA[1234]]></c><d><![CDATA[asdfasdf]]></d></b></xml>

------------------- ------- -- ----------

Mise à jour :

Lors de l'utilisation, il a été constaté qu'il y aurait des problèmes avec la conversion du tableau dans le format suivant :

array(    &#39;item&#39; => array(        array(            &#39;title&#39; => &#39;qwe&#39;,
            &#39;description&#39; => &#39;rtrt&#39;,
            &#39;picurl&#39; => &#39;sdfsd&#39;,
            &#39;url&#39; => &#39;ghjghj&#39;
        ),        array(            &#39;title&#39; => &#39;jyutyu&#39;,
            &#39;description&#39; => &#39;werwe&#39;,
            &#39;picurl&#39; => &#39;xcvxv&#39;,
            &#39;url&#39; => &#39;ghjgh&#39;
        )
    )
);

converti Le résultat est :

<xml>
    <item>
        <0>
            <title>
                <![CDATA[qwe]]>
            </title>
            <description>
                <![CDATA[rtrt]]>
            </description>
            <picurl>
                <![CDATA[sdfsd]]>
            </picurl>
            <url>
                <![CDATA[ghjghj]]>
            </url>
        </0>
        <1>
            <title>
                <![CDATA[jyutyu]]>
            </title>
            <description>
                <![CDATA[werwe]]>
            </description>
            <picurl>
                <![CDATA[xcvxv]]>
            </picurl>
            <url>
                <![CDATA[ghjgh]]>
            </url>
        </1>
    </item></xml>

Normalement, nous ne voulons pas que le nœud entier du XML soit converti ci-dessus : cd3dfde4a81e47b0e19b5c7a4437feeaf35d6e602fd7d0f0edfa6f7d103c1b57. Cependant, en PHP, l'indice ne peut pas avoir le même nom et ne peut pas avoir plusieurs éléments. Ce qu'il faut faire?

J'ai pensé à un moyen d'indexer des éléments, tels que item[0], item[1], et de supprimer les indices sous la forme de [] pendant le processus de conversion pour obtenir plusieurs nœuds d'élément côte à côte. La fonction

est modifiée comme suit :

function arr2xml($data, $root = true){    $str="";    if($root)$str .= "<xml>";    foreach($data as $key => $val){        //去掉key中的下标[]
        $key = preg_replace(&#39;/\[\d*\]/&#39;, &#39;&#39;, $key);        if(is_array($val)){            $child = arr2xml($val, false);            $str .= "<$key>$child</$key>";
        }else{            $str.= "<$key><![CDATA[$val]]></$key>";
        }
    }    if($root)$str .= "</xml>";    return $str;
}

Ensuite, le tableau qui doit être converti ci-dessus doit également être modifié :

$arr1 =array(    &#39;item[0]&#39; => array(            &#39;title&#39; => &#39;qwe&#39;,
            &#39;description&#39; => &#39;rtrt&#39;,
            &#39;picurl&#39; => &#39;sdfsd&#39;,
            &#39;url&#39; => &#39;ghjghj&#39;
        ),
    &#39;item[1]&#39; => array(            &#39;title&#39; => &#39;jyutyu&#39;,
            &#39;description&#39; => &#39;werwe&#39;,
            &#39;picurl&#39; => &#39;xcvxv&#39;,
            &#39;url&#39; => &#39;ghjgh&#39;
        )
);

Le XML converti est le suivant :

<xml>
    <item>
        <title>
            <![CDATA[qwe]]>
        </title>
        <description>
            <![CDATA[rtrt]]>
        </description>
        <picurl>
            <![CDATA[sdfsd]]>
        </picurl>
        <url>
            <![CDATA[ghjghj]]>
        </url>
    </item>
    <item>
        <title>
            <![CDATA[jyutyu]]>
        </title>
        <description>
            <![CDATA[werwe]]>
        </description>
        <picurl>
            <![CDATA[xcvxv]]>
        </picurl>
        <url>
            <![CDATA[ghjgh]]>
        </url>
    </item></xml>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn