【问题标题】:segregating php object variables分离 php 对象变量
【发布时间】:2011-06-17 19:00:30
【问题描述】:

我有一些 XML 作为对象返回,如下所示:

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>
                                                    )

                                            )

                                    )

                            )
                    )
            )
    )
)

如何提取这些变量的值?

【问题讨论】:

    标签: php xml variables object


    【解决方案1】:

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

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

    同样,通过$object-&gt;getResponseStatus() 获取响应状态,通过$object-&gt;getErrors() 获取任何错误。

    响应状态可以是SV_RESPONSE_SUCCESSSV_RESPONSE_FAULTSV_RESPONSE_FAILED 之一。


    重新编辑。 cmets

    要仅获取第一次调用的项目,只需执行以下操作:

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

    【讨论】:

    • 这将返回 [to_number] 字段的每个实例。我只需要从调用 [0] 中提取值。添加 ['0'] 不起作用,['1'] 等也不起作用......
    • $result 只是问题中print_r() 输出中[call] 的数组。有人会假设您知道如何遍历数组,是吗?
    • 啊,好吧,我在上面添加了一个简单的示例。如果您对使用数组有一般性问题,最好就该主题提出一个全新的问题。
    • 我试过了,得到了这个结果:1o2M1M41187Notice: Undefined index: to_number in...
    • 看起来并非每次调用都会包含您可能想要的所有项目。在尝试使用它之前,您必须检查它是否存在(例如,使用 ifarray_key_exists())。
    【解决方案2】:

    所有三个属性都标记为private,因此它们必须通过标记为public的访问器方法获得

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2017-08-21
      • 2013-07-26
      • 2012-08-28
      • 2016-03-30
      相关资源
      最近更新 更多