使用simpleXMLobject创建php数组

时间:2013-04-08 22:34:24

标签: 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(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 />";
}

这只输出第一个space_id,我需要获取“space_reservation”数组中的所有space_id。并非所有记录都有多个space_ids。任何指导我正确方向的帮助表示赞赏。不确定我是否应该使用xpath但我需要重新编写我的foreach语句,无论如何。

我希望能够将所有对“object(SimpleXMLElement)# _ (#)”的引用转换为“array(#)”

[10]=> array (28) { 
["reservation_id"]=> string(7) "8210614" 
["event_id"]=> string(6) "279215"
["space_reservation"]=> array(2) { 

    [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" } } } 
}

我的cakephp 1.3控制器中的功能是:

$xml = simplexml_load_string($string);
$this->data['events']= $xml->children();
$resdata = $this->data['events'];
$this->set('resdata',$resdata);

2 个答案:

答案 0 :(得分:1)

我认为这应该符合您的要求:

foreach ($resdata as $res) {
    echo $res->event_id . '<br />';
    foreach ($res->space_reservation as $reservation) {
        echo $reservation->space_id . '<br />';
    }
}

答案 1 :(得分:0)

用Google搜索并找到任何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;
}