下面写了一个函数用来把simplexml对象转换为数组,支持SimpleXMLElement和SimpleXMLIterator对象。
PHP语言: php simplexml文档对象转换为标准数组
<?php
//simplexml文档对象转换为标准数组
function simplexml_obj2array($obj)
{
if( count($obj) >= 1 )
{
$result = $keys = array();
foreach( $obj as $key=>$value)
{
isset($keys[$key]) ? ($keys[$key] += 1) : ($keys[$key] = 1);
if( $keys[$key] == 1 )
{
$result[$key] = simplexml_obj2array($value);
}
elseif( $keys[$key] == 2 )
{
$result[$key] = array($result[$key], simplexml_obj2array($value));
}
else if( $keys[$key] > 2 )
{
$result[$key][] = simplexml_obj2array($value);
}
}
return $result;
}
else if( count($obj) == 0 )
{
return (string)$obj;
}
}
?>
//simplexml文档对象转换为标准数组
function simplexml_obj2array($obj)
{
if( count($obj) >= 1 )
{
$result = $keys = array();
foreach( $obj as $key=>$value)
{
isset($keys[$key]) ? ($keys[$key] += 1) : ($keys[$key] = 1);
if( $keys[$key] == 1 )
{
$result[$key] = simplexml_obj2array($value);
}
elseif( $keys[$key] == 2 )
{
$result[$key] = array($result[$key], simplexml_obj2array($value));
}
else if( $keys[$key] > 2 )
{
$result[$key][] = simplexml_obj2array($value);
}
}
return $result;
}
else if( count($obj) == 0 )
{
return (string)$obj;
}
}
?>
示例:
<?php
$string = '<?xml version="1.0" encoding="UTF-8"?>
<root>
<name><![CDATA[三叶草]]></name>
<url><![CDATA[http://bloomandkevin.cn]]></url>
<items>
<product>
<name><![CDATA[三叶草]]></name>
<url><![CDATA[http://bloomandkevin.cn]]></url>
</product>
<product>
<name><![CDATA[三叶草]]></name>
<url><![CDATA[http://bloomandkevin.cn]]></url>
</product>
</items>
</root>
';
var_dump( simplexml_obj2array(simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA)));
?>
$string = '<?xml version="1.0" encoding="UTF-8"?>
<root>
<name><![CDATA[三叶草]]></name>
<url><![CDATA[http://bloomandkevin.cn]]></url>
<items>
<product>
<name><![CDATA[三叶草]]></name>
<url><![CDATA[http://bloomandkevin.cn]]></url>
</product>
<product>
<name><![CDATA[三叶草]]></name>
<url><![CDATA[http://bloomandkevin.cn]]></url>
</product>
</items>
</root>
';
var_dump( simplexml_obj2array(simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA)));
?>
结果:
array(3) {
["name"]=>
string(9) "三叶草"
["url"]=>
string(23) "http://bloomandkevin.cn"
["items"]=>
array(1) {
["product"]=>
array(2) {
[0]=>
array(2) {
["name"]=>
string(9) "三叶草"
["url"]=>
string(23) "http://bloomandkevin.cn"
}
[1]=>
array(2) {
["name"]=>
string(9) "三叶草"
["url"]=>
string(23) "http://bloomandkevin.cn"
}
}
}
}
["name"]=>
string(9) "三叶草"
["url"]=>
string(23) "http://bloomandkevin.cn"
["items"]=>
array(1) {
["product"]=>
array(2) {
[0]=>
array(2) {
["name"]=>
string(9) "三叶草"
["url"]=>
string(23) "http://bloomandkevin.cn"
}
[1]=>
array(2) {
["name"]=>
string(9) "三叶草"
["url"]=>
string(23) "http://bloomandkevin.cn"
}
}
}
}
缺点:
丢失了XML节点中的属性值。