PHP がバックエンド サーバーとして動作している場合、フロントエンドから XML ファイルを解析し、XML 形式でデータを返す必要があることがよくあります。この場合、XML と連想配列の間で変換が行われます。 PHP は非常に頻繁に使用されます。たとえば、flex やその他のクライアント プログラムは、多くの場合、このメソッドを使用してサーバーと対話します。以下にまとめた 2 つの方法は、XML と配列の変換の作業負荷を大幅に簡素化します。
[php]
/**
*
* 単純な配列を単純な XML に変換します
* @param string $data 変換される配列
* @param string $tag 使用するタグ
* @example
* $arr = 配列(
'rtxAccount'=>'aaron','ipAddr'=>'192.168.0.12',
'conferenceList'=>array('conference'=>
配列(
array('conferenceId'=>1212,'conferenceTitle'=>'quanshi 444','smeAccount'=>'bingxu.dong@quanshi.com'),
array('conferenceId'=>454,'conferenceTitle'=>'quanshi会議','smeAccount'=>'bingxu.dong@quanshi.com'),
array('conferenceId'=>6767,'conferenceTitle'=>'quanshi会議','smeAccount'=>'bingxu.dong@quanshi.com'),
array('conferenceId'=>232323,'conferenceTitle'=>'quanshi uuu','smeAccount'=>'bingxu.dong@quanshi.com'),
array('conferenceId'=>8989,'conferenceTitle'=>'quanshi会議','smeAccount'=>'bingxu.dong@quanshi.com'),
array('conferenceId'=>1234343212,'conferenceTitle'=>'quanshi会議','smeAccount'=>'bingxu.dong@quanshi.com')
)
)
);
に変換:
カンファレンス>
カンファレンス>
カンファレンス>
カンファレンス>
カンファレンス>
カンファレンス>
会議リスト>
*/
関数 array2xml($data,$tag = '')
{
$xml = '';
foreach($data as $key => $value)
{
if(is_numeric($key))
{
if(is_array($value))
{
$xml .= "";
$xml .= array2xml($value);
$xml .="$tag>";
}
その他
{
$xml .= "<$tag>$value$tag>";
}
}
その他
{
if(is_array($value))
{
$keys = array_keys($value);
if(is_numeric($keys[0]))
{
$xml .=array2xml($value,$key);
}
その他
{
$xml .= "";
$xml .=array2xml($value);
$xml .= "$key>";
}
}
その他
{
$xml .= "<$key>$value$key>";
}
}
}
$xml を返します。
}
}
xml2配列
[php]
/**
*
* 単純な XML を連想配列に変換します
* @param string $xmlString xml string
* @example
*
120期間>
&lt; rtxaccount&gt; invitee 1のRTXアカウント&lt;/rtxaccount&gt;
& Lt; 電話番号 & gt; 招待者 1 電話番号 & lt;/電話番号 & gt;
&lt; rtxaccount&gt; invitee 2のRTXアカウント&lt;/rtxaccount&gt;
& Lt; 電話番号 & gt; 招待者 2 電話番号 & lt;/電話番号 & gt;
招待者>
変換後の連想配列:
配列
(
[会議タイトル] => IT 交換カンファレンス www.2cto.com
[開始時間] => 2011-12-19 12:00:00
[rtxアカウント] =>andy1111111
[ipAddr] => 192.168.1.56
[期間] => 120
[会議の種類] => 1
[招待者] => 配列
(
[招待者] => 配列
(
以来
(
[rtxAccount] => 招待者 1 の RTX アカウント
[電話] => 招待者 1 の電話番号
)
以来
(
[rtxAccount] => 招待者 2 の RTX アカウント
[電話] => 招待者 2 の電話番号
)
)
)
)
*/
関数 xml2array($xmlString = '')
{
$targetArray = 配列();
$xmlObject = simplexml_load_string($xmlString);
$mixArray = (配列)$xmlObject;
foreach($mixArray as $key => $value)
{
if(is_string($value))
{
$targetArray[$key] = $value;
}
if(is_object($value))
{
$targetArray[$key] = xml2array($value->asXML());
}
if(is_array($value))
{
foreach($value as $zkey => $zvalue)
{
if(is_numeric($zkey))
{
$targetArray[$key][] = xml2array($zvalue->asXML());
}
if(is_string($zkey))
{
$targetArray[$key][$zkey] = xml2array($zvalue->asXML());
}
}
}
}
$targetArray を返します。
}
抜粋 andy1219111 の专栏