0

オブジェクト(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_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 に答える