php数组转xml的递归实现,php数组xml递归
php数组转xml的递归实现,php数组xml递归
PHP中奖数组转为xml的需求是常见的,而且实现方法也有很多种,百度找了一下各种实现方法,但是基本是借组一些组件啥的。我就自己写了一个字符串拼组的方法,支持多维数组。仅供参考,不足之处敬请不吝赐教!
<span>/*</span><span>* * 将数组转换为xml * @param array $data 要转换的数组 * @param bool $root 是否要根节点 * @return string xml字符串 * @author Dragondean * @url http://www.cnblogs.com/dragondean </span><span>*/</span> <span>function</span> arr2xml(<span>$data</span>, <span>$root</span> = <span>true</span><span>){ </span><span>$str</span>=""<span>; </span><span>if</span>(<span>$root</span>)<span>$str</span> .= "<xml>"<span>; </span><span>foreach</span>(<span>$data</span> <span>as</span> <span>$key</span> => <span>$val</span><span>){ </span><span>if</span>(<span>is_array</span>(<span>$val</span><span>)){ </span><span>$child</span> = arr2xml(<span>$val</span>, <span>false</span><span>); </span><span>$str</span> .= "<<span>$key</span>><span>$child</span></<span>$key</span>>"<span>; }</span><span>else</span><span>{ </span><span>$str</span>.= "<<span>$key</span>><![CDATA[<span>$val</span>]]></<span>$key</span>>"<span>; } } </span><span>if</span>(<span>$root</span>)<span>$str</span> .= "</xml>"<span>; </span><span>return</span> <span>$str</span><span>; }</span>
上面是实现的方法,第一个参数是你要转换的数组,第二个可选参数设定是否需要加
测试代码:
<span>$arr</span>=<span>array</span>('a'=>'aaa','b'=><span>array</span>('c'=>'1234' , 'd' => "asdfasdf"<span>)); </span><span>echo</span> arr2xml(<span>$arr</span>);
代码执行后的结果为:
<span><</span><span>xml</span><span>><</span><span>a</span><span>></span><span><!</span><span>[CDATA[aaa]]</span><span>></span><span></</span><span>a</span><span>><</span><span>b</span><span>><</span><span>c</span><span>></span><span><!</span><span>[CDATA[1234]]</span><span>></span><span></</span><span>c</span><span>><</span><span>d</span><span>></span><span><!</span><span>[CDATA[asdfasdf]]</span><span>></span><span></</span><span>d</span><span>></</span><span>b</span><span>></</span><span>xml</span><span>></span>
---------------------- ----------
更新:
在使用过程中发现下面格式的数组转换会出现问题:
<span>array</span><span>( </span>'item' => <span>array</span><span>( </span><span>array</span><span>( </span>'title' => 'qwe', 'description' => 'rtrt', 'picurl' => 'sdfsd', 'url' => 'ghjghj'<span> )</span>, <span>array</span><span>( </span>'title' => 'jyutyu', 'description' => 'werwe', 'picurl' => 'xcvxv', 'url' => 'ghjgh'<span> ) ) );</span>
转换出来的结果是:
<span><</span><span>xml</span><span>></span> <span><</span><span>item</span><span>></span> <span><</span><span>0</span><span>></span> <span><</span><span>title</span><span>></span> <span><![CDATA[</span><span>qwe</span><span>]]></span> <span></</span><span>title</span><span>></span> <span><</span><span>description</span><span>></span> <span><![CDATA[</span><span>rtrt</span><span>]]></span> <span></</span><span>description</span><span>></span> <span><</span><span>picurl</span><span>></span> <span><![CDATA[</span><span>sdfsd</span><span>]]></span> <span></</span><span>picurl</span><span>></span> <span><</span><span>url</span><span>></span> <span><![CDATA[</span><span>ghjghj</span><span>]]></span> <span></</span><span>url</span><span>></span> <span></</span><span>0</span><span>></span> <span><</span><span>1</span><span>></span> <span><</span><span>title</span><span>></span> <span><![CDATA[</span><span>jyutyu</span><span>]]></span> <span></</span><span>title</span><span>></span> <span><</span><span>description</span><span>></span> <span><![CDATA[</span><span>werwe</span><span>]]></span> <span></</span><span>description</span><span>></span> <span><</span><span>picurl</span><span>></span> <span><![CDATA[</span><span>xcvxv</span><span>]]></span> <span></</span><span>picurl</span><span>></span> <span><</span><span>url</span><span>></span> <span><![CDATA[</span><span>ghjgh</span><span>]]></span> <span></</span><span>url</span><span>></span> <span></</span><span>1</span><span>></span> <span></</span><span>item</span><span>></span> <span></</span><span>xml</span><span>></span>
通常情况下,上面转换出来的xml整<0><1>那层节点我们是不要的。但是在php中下标有不能同名,不能有多个item。怎么办呢?
我想了一个办法就是给item下下标,比如item[0],item[1],在转换过程中在去掉[]形式的下标,实现多个item节点并排。
函数修改后如下:
<span>function</span> arr2xml(<span>$data</span>, <span>$root</span> = <span>true</span><span>){ </span><span>$str</span>=""<span>; </span><span>if</span>(<span>$root</span>)<span>$str</span> .= "<xml>"<span>; </span><span>foreach</span>(<span>$data</span> <span>as</span> <span>$key</span> => <span>$val</span><span>){ </span><span>//</span><span>去掉key中的下标[]</span> <span>$key</span> = <span>preg_replace</span>('/\[\d*\]/', '', <span>$key</span><span>); </span><span>if</span>(<span>is_array</span>(<span>$val</span><span>)){ </span><span>$child</span> = arr2xml(<span>$val</span>, <span>false</span><span>); </span><span>$str</span> .= "<<span>$key</span>><span>$child</span></<span>$key</span>>"<span>; }</span><span>else</span><span>{ </span><span>$str</span>.= "<<span>$key</span>><![CDATA[<span>$val</span>]]></<span>$key</span>>"<span>; } } </span><span>if</span>(<span>$root</span>)<span>$str</span> .= "</xml>"<span>; </span><span>return</span> <span>$str</span><span>; }</span>
那么上面需要转换的数组也需要跟着变动一下:
<span>$arr1</span> =<span>array</span><span>( </span>'item[0]' => <span>array</span><span>( </span>'title' => 'qwe', 'description' => 'rtrt', 'picurl' => 'sdfsd', 'url' => 'ghjghj'<span> )</span>, 'item[1]' => <span>array</span><span>( </span>'title' => 'jyutyu', 'description' => 'werwe', 'picurl' => 'xcvxv', 'url' => 'ghjgh'<span> ) );</span>
转换后的xml如下:
<span><</span><span>xml</span><span>></span> <span><</span><span>item</span><span>></span> <span><</span><span>title</span><span>></span> <span><![CDATA[</span><span>qwe</span><span>]]></span> <span></</span><span>title</span><span>></span> <span><</span><span>description</span><span>></span> <span><![CDATA[</span><span>rtrt</span><span>]]></span> <span></</span><span>description</span><span>></span> <span><</span><span>picurl</span><span>></span> <span><![CDATA[</span><span>sdfsd</span><span>]]></span> <span></</span><span>picurl</span><span>></span> <span><</span><span>url</span><span>></span> <span><![CDATA[</span><span>ghjghj</span><span>]]></span> <span></</span><span>url</span><span>></span> <span></</span><span>item</span><span>></span> <span><</span><span>item</span><span>></span> <span><</span><span>title</span><span>></span> <span><![CDATA[</span><span>jyutyu</span><span>]]></span> <span></</span><span>title</span><span>></span> <span><</span><span>description</span><span>></span> <span><![CDATA[</span><span>werwe</span><span>]]></span> <span></</span><span>description</span><span>></span> <span><</span><span>picurl</span><span>></span> <span><![CDATA[</span><span>xcvxv</span><span>]]></span> <span></</span><span>picurl</span><span>></span> <span><</span><span>url</span><span>></span> <span><![CDATA[</span><span>ghjgh</span><span>]]></span> <span></</span><span>url</span><span>></span> <span></</span><span>item</span><span>></span> <span></</span><span>xml</span><span>></span>

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.
