使用simpleXMLobject创建php数组
我正在尝试将带有对象(SimpleXMLElement)的数组($resdata)放入php数组:使用simpleXMLobject创建php数组,php,simplexml,cakephp-1.3,Php,Simplexml,Cakephp 1.3,我正在尝试将带有对象(SimpleXMLElement)的数组($resdata)放入php数组: $resdata = array(59) { [0]=> ... [10]=> object(SimpleXMLElement)#294 (28) { ["reservation_id"]=> string(7) "8210614" ["event_id"]=> string(6) "279215" ["space_reservation"]=> array(
$resdata =
array(59) {
[0]=> ...
[10]=> object(SimpleXMLElement)#294 (28) {
["reservation_id"]=> string(7) "8210614"
["event_id"]=> string(6) "279215"
["space_reservation"]=> array(2) {
[0]=> object(SimpleXMLElement)#344 (9) {
["space_id"]=> string(4) "3760"
["space_name"]=> string(9) "205"
["formal_name"]=> string(33) "Center" }
[1]=> object(SimpleXMLElement)#350 (9) {
["space_id"]=> string(4) "3769"
["space_name"]=> string(9) "207"
["formal_name"]=> string(32) "Right" } } }
}
我试过:
$res = (array)$resdata;
$reservation = $res['reservation'];
$result = array();
foreach ($reservation as $key => $value){
$res = array($value);
$spid = $res[0]->space_reservation->space_id;
echo $value->event_id."<br />";
echo $spid."<br />";
}
我的cakephp 1.3控制器中的函数如下:
$xml = simplexml_load_string($string);
$this->data['events']= $xml->children();
$resdata = $this->data['events'];
$this->set('resdata',$resdata);
我认为这应该满足您的需求:
foreach ($resdata as $res) {
echo $res->event_id . '<br />';
foreach ($res->space_reservation as $reservation) {
echo $reservation->space_id . '<br />';
}
}
foreach($resdata作为$res){
echo$res->event_id.“
”;
foreach($res->space\u预订为$reservation){
echo$reservation->space_id.“
”;
}
}
通过谷歌搜索,找到了任何SimpleXMLElement到数组转换的通用解决方案:
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;
}
这很有趣。我确实在php.net中看到了这一点,但老实说,我不知道如何/在何处实现。我的cake控制器中已经有一个函数,可以生成原始数组$resdata,该数组可能与示例中的上述$xml或$arr相关。我只是不知道,但我确实需要将“object(SimpleXMLElement)#(u#)(u#)”)更改为php中可以键入的内容。如果我从上面的foreach语句开始并将其放在我的视图中,我需要编辑simplexmlement的$arr[$tag]=$element instanceof simplexmlement?对函数的引用。有什么想法吗?@sloga你能给我原始的xml,这样我就可以做一些测试吗?它能像$tag=instanceof simplexmlement($element)那样简单吗@sloga不,我指的是XML标记的一个例子:)
$element
变量的值。我知道,我的意思是作为一个单独的问题,大声思考一下……上面的$resdata结果就是$element。我没有包括所有59个。只有10号预订了2个不同的空间。所有其他的(49个)都有一个单独的空间id。我应该把它变为变量,然后和你聊天或发电子邮件吗?我希望能够将所有对“对象(SimpleXMLElement)——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————{[0]=>array(9){[“space_id”]=>string(4)“3760”[“space_name”]=>string(9)“205”[“formal_name”]=>string(33)“Center”}[1]=>array(9){[“space_id”]=>string(4)“3769”[“space_name”]=>string(9)“207”[“formal_name”]=>string(32)“Right”}}我用一个修改过的版本结束了前进。谢谢你的建议。
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;
}