【问题标题】:Foreach Loop for Array of StdClass in PhpPHP 中 StdClass 数组的 Foreach 循环
【发布时间】:2014-09-19 17:11:36
【问题描述】:

我试图使用 foreach 循环获取 WSResult->Fare->BaseFare 和 Status->StatusCode 的值 请帮帮我....

但我有多个 WsResult,如 [0]、[1] 并继续。 这是我的 Api 的回复。

$h=array();
$h= (array)$cliente->__call('Search',$opta);

下面是我从 api 得到的输出

Array (
[SearchResult] => stdClass Object (
    [Status] => stdClass Object (
        [StatusCode] => 02
        [Description] => Successfull
        [Category] => SR
    )
    [Result] => stdClass Object (
        [WSResult] => Array (
            [0] => stdClass Object (
                [TripIndicator] => 1
                [Fare] => stdClass Object (
                    [BaseFare] => 2539
                    [Tax] => 460
                    [ServiceTax] => 0
                    [AdditionalTxnFee] => 152.34
                    [AgentCommission] => 38.08
                    [TdsOnCommission] => 7.62
                    [IncentiveEarned] => 0.00
                    [TdsOnIncentive] => 0.00
                    [PLBEarned] => 0.00
                    [TdsOnPLB] => 0.00
                    [PublishedPrice] => 3156.34
                    [AirTransFee] => 0
                    [Currency] => INR
                    [Discount] => 0
                    [ChargeBU] => stdClass Object (
                        [ChargeBreakUp] => Array (
                            [0] => stdClass Object (
                                [PriceId] => 0
                                [ChargeType] => TboMarkup
                                [Amount] => 5
                            )
                            [1] => stdClass Object (
                                [PriceId] => 0
                                [ChargeType] => OtherCharges
                                [Amount] => 0.00
                            )
                        )
                    )
                    [OtherCharges] => 5.00
                    [FuelSurcharge] => 0
                    [TransactionFee] => 0
                    [ReverseHandlingCharge] => 0
                    [OfferedFare] => 2965.92
                    [AgentServiceCharge] => 0
                    [AgentConvienceCharges] => 0
                )
            )
        )
    )
)
)

如何访问Fare 下的BaseFare 以及Status 下的StatusCode

我尝试了类似的方法,但没有成功:

foreach($h->SearchResult as $result){
     echo $result->Status->StatusCode;
     echo $result->Result->WSResult->Fare->BaseFare;
}

但我收到错误为“尝试获取非对象的属性”。

【问题讨论】:

    标签: php arrays for-loop foreach stdclass


    【解决方案1】:

    更新
    查看您更新的问题,您的代码存在更大的问题。您正在调用 magic __call 方法 手动!别。只是不要那样做。
    替换:

    $h= (array)$cliente->__call('Search',$opta);
    //with
    $h = $cliente->Search($opta);
    

    var_dump 的值马上$h
    我假设,因为我已经从您的代码中删除了演员表,所以您可以轻松地执行以下操作:

    $baseFares = array();
    foreach ($h->SearchResult->Result->WsResult as $k => $fare)
        $baseFares[$k] = $fare->Fare->BaseFare;
    var_dump($baseFares);
    

    这应该会为您提供 API 返回的所有 baseFares 的数组。

    $h 的值不是stdClass 的实例。如果您仔细查看转储,您会发现您实际上是在处理一个数组:

    Array (//<-- array
        [SearchResult] => stdClass Object (//<-- this is an object
    

    因此,要获取所需的数据,您必须编写:

    $result = $h[0]->SearchResult->Result->WSResult;//this is an array, again
    foreach ($result as $r)
        echo 'BaseFare: ', $r->Fare->BaseFare, PHP_EOL;
    

    【讨论】:

    • @NavinBlackx:基本上$h 是一个包含对象的数组,因此要获取状态,您必须编写$h[0]-&gt;SearchResult-&gt;Status-&gt;StatusCode,对于BaseFare 值,请参阅我的答案。您得到的错误是因为您试图访问 array 上的属性,而不是该数组中的对象
    猜你喜欢
    • 2012-04-05
    • 1970-01-01
    • 2011-06-09
    • 2020-05-17
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2014-06-18
    • 2012-01-03
    相关资源
    最近更新 更多