如何将 SimpleXMLObject 转换为 PHP 数组?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7778814/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to convert SimpleXMLObject into PHP Array?
提问by CuriousMind
Consider the following code:
考虑以下代码:
$string = '<device>
<id>1234</id>
<label>118</label>
<username>root</username>
<password>helloWorld</password>
<hardware>
<memory>4GB RAM</memory>
<storage_drives>
<storage_drive_1>2TB SATA 7,200RPM</storage_drive_1>
<storage_drive_2>1TB SATA 7,200RPM</storage_drive_2>
<storage_drive_3>Not Applicable</storage_drive_3>
<storage_drive_4>Not Applicable</storage_drive_4>
</storage_drives>
</hardware>
</device>';
$xml = new SimpleXMLElement($string);
$deviceDetails = Array();
foreach($xml as $element){
$tag = $element->getName();
$deviceDetails += Array($tag => '$element->$tag)',
);
}
Output $detailsDetails
array is as follows:
输出$detailsDetails
数组如下:
Array
(
[id] => $element->$tag)
[label] => $element->$tag)
[username] => $element->$tag)
[password] => $element->$tag)
[hardware] => $element->$tag)
)
which is wrong.
这是错误的。
My question is, how to make $element->$tag
work?
我的问题是,如何$element->$tag
工作?
采纳答案by dfsq
Book Of Zeuscode wrapped in function to make it work recursively:
Book Of Zeus代码包裹在函数中以使其递归工作:
function xml2array($xml)
{
$arr = array();
foreach ($xml as $element)
{
$tag = $element->getName();
$e = get_object_vars($element);
if (!empty($e))
{
$arr[$tag] = $element instanceof SimpleXMLElement ? xml2array($element) : $e;
}
else
{
$arr[$tag] = trim($element);
}
}
return $arr;
}
$xml = new SimpleXMLElement($string);
print_r(xml2array($xml));
Array
(
[id] => 1234
[label] => 118
[username] => root
[password] => helloWorld
[hardware] => Array
(
[memory] => 4GB RAM
[storage_drives] => Array
(
[storage_drive_1] => 2TB SATA 7,200RPM
[storage_drive_2] => 1TB SATA 7,200RPM
[storage_drive_3] => Not Applicable
[storage_drive_4] => Not Applicable
)
)
)
回答by Book Of Zeus
Try this:
尝试这个:
$string = '<device>
<id>1234</id>
<label>118</label>
<username>root</username>
<password>helloWorld</password>
<hardware>
<memory>4GB RAM</memory>
<storage_drives>
<storage_drive_1>2TB SATA 7,200RPM</storage_drive_1>
<storage_drive_2>1TB SATA 7,200RPM</storage_drive_2>
<storage_drive_3>Not Applicable</storage_drive_3>
<storage_drive_4>Not Applicable</storage_drive_4>
</storage_drives>
</hardware>
</device>';
$xml = json_decode(json_encode((array) simplexml_load_string($string)), 1);
This will output:
这将输出:
Array
(
[id] => 1234
[label] => 118
[username] => root
[password] => helloWorld
[hardware] => Array
(
[memory] => 4GB RAM
[storage_drives] => Array
(
[storage_drive_1] => 2TB SATA 7,200RPM
[storage_drive_2] => 1TB SATA 7,200RPM
[storage_drive_3] => Not Applicable
[storage_drive_4] => Not Applicable
)
)
)
or if you don't like this, you can use a PHP class like: http://www.bin-co.com/php/scripts/xml2array/
或者如果你不喜欢这个,你可以使用一个 PHP 类,如:http: //www.bin-co.com/php/scripts/xml2array/
or view dfsqanswer
或查看dfsq答案
回答by Pritee chaudhari
Try This:
尝试这个:
$array = json_decode(json_encode((array)$xml), TRUE);