ホームページ  >  記事  >  バックエンド開発  >  昨日の PHP 多次元配列の XML データ形式への変換に関する関連問題の続きです。

昨日の PHP 多次元配列の XML データ形式への変換に関する関連問題の続きです。

WBOY
WBOYオリジナル
2016-06-13 12:36:16802ブラウズ

昨日の PHP 多次元配列を XML データ形式に変換する問題の続き
まず第一に、昨日の 2 人の友人、jordan102 と xuzuning
に感謝します。 投稿リンク: http://bbs.csdn.net/topics/390609227

二人が提供したテスト方法は確かに実現可能で実用的です。

しかし、プロジェクトの開発過程で、このプロジェクトはあまりにも異常であることがわかり、依然としてそのような状況が続いています

PHP 配列:

$ar=array( <br />
	"auth"=> array(<br />
		"user"=>  "user001",<br />
		"password"=> "pass001",<br />
		"context"=>  "1" <br />
	),<br />
	"task"=> array(<br />
					"code"=>"0101",<br />
					"item"=>array(<br />
						"title"=>"abc",<br />
						"web"=>array(<br />
							"name"=>"baidu.com",<br />
							"ip"=>"1.2.3.4",<br />
						),<br />
						"web"=>array(<br />
							"name"=>"sina.com",<br />
							"ip"=>"1.1.1.1",<br />
						),<br />
						"confirm order"=>"1",<br />
					),<br />
					"reply_to"=>"info@xxx.com",<br />
	),<br />
);<br />


内部の item ノードに注目してください。実際には、Web サブノードが 2 ~ 4 つほど存在する可能性があります。
現在の変換プログラムのコードは次のとおりです:

$xml = simplexml_load_string('<request />');<br />
create($ar, $xml);<br />
$xmlData =  $xml->saveXML();<br />
echo $xmlData;<br />
<br />
function create($ar, $xml) {<br />
	foreach($ar as $k=>$v) {<br />
		if(is_array($v)) {<br />
			$x = $xml->addChild($k);<br />
			create($v, $x);<br />
		}else $xml->addChild($k, $v);<br />
	}<br />
}

このコードは比較的効率的ですが、同じ名前のノードが見つかった場合は、最後のノードだけをフィルタリングして除外するため、最終的な出力結果は次のようになります。Web の名前の値が baidu.com の場合は注意してください。

出力は次のようになります:

<?xml version="1.0"?><br />
<request><br />
	<auth><br />
		<user>user001</user><br />
		<password>pass001</password><br />
		<context>1</context><br />
	</auth><br />
	<task><br />
		<code>0101</code><br />
		<item><br />
			<title>abc</title><br />
			<web><br />
				<name>sina.com</name><br />
				<ip>1.1.1.1</ip><br />
			</web><br />
			<confirm order>1</confirm order><br />
		</item><br />
		<reply_to>info@xxx.com</reply_to><br />
	</task><br />
</request><br />
変換関数を何度も変更しましたが、完全なデータを出力できずに頭が痛くなります...

先輩方、何か良い方法があれば教えてください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。