2011-06-17 216 views
0

我有些XML正在被返回是作为对象,像这样:分离PHP对象变量

SwitchvoxResponse Object 
(
[apiStatus:private] => success 
[apiErrors:private] => Array 
    (
    ) 

[apiResult:private] => Array 
    (
     [calls] => Array 
      (
       [page_number] => 1 
       [total_pages] => 1 
       [items_per_page] => 50 
       [total_items] => 1 
       [call] => Array 
        (
         [0] => Array 
          (
           [id] => 14301 
           [origination] => outgoing 
           [start_time] => 2011-06-17 13:40:58 
           [from] => CALLER_NAME <4485> 
           [from_account_id] => 1120 
           [from_name] => CALLER_NAME 
           [from_number] => 4485 
           [to] => CALLEE_NAME <6534> 
           [to_account_id] => 1101 
           [to_name] => CALLEE_NAME 
           [to_number] => 6534 
           [total_duration] => 47 
           [talk_duration] => 43 
           [events] => Array 
            (
             [event] => Array 
              (
               [0] => Array 
                (
                 [start_time] => 2011-06-17 13:40:58 
                 [type] => OUTGOING 
                 [display] => Dialed number (6534) 
                ) 

               [1] => Array 
                (
                 [start_time] => 2011-06-17 13:40:58 
                 [type] => INTERNAL 
                 [display] => Rang CALLEE_NAME <6534> 
                ) 

               [2] => Array 
                (
                 [start_time] => 2011-06-17 13:41:02 
                 [type] => TALKING 
                 [display] => Talked to CALLEE_NAME <6534> for 43 seconds 
                ) 

               [3] => Array 
                (
                 [start_time] => 2011-06-17 13:41:45 
                 [type] => HANGUP 
                 [display] => Call was hung up by CALLER_NAME <4485> 
                ) 

              ) 

            ) 

          ) 
        ) 
      ) 
    ) 
) 

我如何拔出这些变量的值?

+0

如何将XML是什么样子? – ChrFin

回答

1

结果可以通过SwitchvoxResponse::getResult()方法来访问。给定$object是问题中引用的SwitchvoxResponse对象,下面的示例遍历每个call并打印from值。

$result = $object->getResult(); 
foreach ($result['calls']['call'] as $call) { 
    echo $call['from']; 
} 

类似地,响应状态通过$object->getResponseStatus()和任何错误经由$object->getErrors()取出。

响应状态可以是SV_RESPONSE_SUCCESS,SV_RESPONSE_FAULTSV_RESPONSE_FAILED之一。


编辑re。评论

要获取第一个呼叫的项目而已,简单地做:

$result = $object->getResult(); 
$call = $result['calls']['call'][0]; 
// And access the values like 
echo $call['from_name']; 
+0

这会返回[to_number]字段的每个实例。我只需要调用[0]的值。添加['0']不起作用,['1']等也不起作用。 – lorsungcu

+0

问题中'$ result'只是'print_r()'输出中'[call]'的数组。人们会假设你知道如何遍历数组,你呢? – salathe

+0

nada。随着我去了解这一切。 – lorsungcu

0

所有三个属性被标记private,所以他们将不得不通过存取器方法来获得标记public