使用simpleXMLobject创建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(

我正在尝试将带有对象(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(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;
}