0

我正在尝试将此数组($resdata)与对象(SimpleXMLElement)一起放入一个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_id。任何为我指明正确方向的帮助表示赞赏。不确定我是否应该使用 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);
4

2 回答 2

1

我认为这应该做你正在寻找的:

foreach ($resdata as $res) {
    echo $res->event_id . '<br />';
    foreach ($res->space_reservation as $reservation) {
        echo $reservation->space_id . '<br />';
    }
}
于 2013-04-08T22:47:48.677 回答
0

谷歌搜索并找到任何 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;
}
于 2013-04-08T22:49:27.273 回答