2017-04-05 39 views
0

我目前從Web服務使用檢索信息:笨PHP - 解析SOAP(WDSL)導致

$serviceData= new SoapClient('http://xxx.xxx.xxx.xx:xx/WebService/WebService.svc?wsdl'); 
$response = $serviceData->GetMyInformation(); 
var_dump($response); 

從的var_dump結果如下:

object(stdClass)#15 (1) 
{ ["GetDatabaseResult"]=> object(stdClass)#16 (1) 
    { ["DatabaseInformation"]=> array(4) 

     { [0]=> object(stdClass)#17 (2) 
      { ["DateCreated"]=> string(19) "2016-07-06T09:36:03" ["CurrencyCode"]=> string(3) "USD" } 

      [1]=> object(stdClass)#18 (2) 
      { ["DateCreated"]=> string(19) "2016-12-07T02:49:02" ["CurrencyCode"]=> string(3) "USD" } 

      [2]=> object(stdClass)#19 (2) 
      { ["DateCreated"]=> string(19) "2016-12-07T02:52:38" ["CurrencyCode"]=> string(3) "USD" } 

      [3]=> object(stdClass)#20 (2) 
      { ["DateCreated"]=> string(19) "2016-12-07T02:53:38" ["CurrencyCode"]=> string(3) "USD" } 

     } 
    } 
} 

我需要的是一個foreach環,我可以檢索每個鍵和值:

DateCreated: 2016-07-06T09:36:03 
CurrencyCode: USD 

我嘗試使用json_encode($response)可以除去噸他object(stdClass)#15 (1)和它走到這一步的json_dencode($response)

array(1) 
{ ["GetDatabaseResult"]=> array(1) 
    { ["DatabaseInformation"]=> array(4) 
     { [0]=> array(2) 
      { ["DateCreated"]=> string(19) "2016-07-06T09:36:03" ["CurrencyCode"]=> string(3) "USD" } 

      [1]=> array(17) 
      { ["DateCreated"]=> string(19) "2016-12-07T02:49:02" ["CurrencyCode"]=> string(3) "USD" } 

      [2]=> array(17) 
      { ["DateCreated"]=> string(19) "2016-12-07T02:52:38" ["CurrencyCode"]=> string(3) "USD" } 

      [3]=> array(17) 
      { ["DateCreated"]=> string(19) "2016-12-07T02:52:38" ["CurrencyCode"]=> string(3) "USD" } 

     } 
    } 
} 

我知道這是一個嵌套的數組,但我將如何解析呢?

回答

1

不需要編碼/解碼循環。試試這個:

foreach($response->GetDatabaseResult->DatabaseInformation as $entry){ 
    error_log("Date Created: ".$entry->DateCreated."; Currency Code: ".$entry->CurrencyCode); 
} 
+0

這太棒了!你能解釋一下你的思想過程:分解JSON以及你如何到達:$ response-> GetDatabaseResult-> DatabaseInformation。我一直有這個問題,不知道何時應用 - >(對象),因爲主要我上面發佈的JSON看起來像關聯數組。 – Raidenlee

+0

從var_dump的輸出結果來看,確實需要一點思路,但是在任何你看到'object(stdClass)''那麼''>'的地方,以及你看到'array'的任何地方都可能是'[]'lookup或一個'foreach'。您可能需要嘗試使用適當的鍵進行數組查找,但這應該是您所需要的。 – Femi

+0

非常感謝您的建議。剛剛提出你的答案。對象(stdClass)#15(1) {[「GetDatabaseResult」] =>對象(stdClass)#(1) – Raidenlee