Codeigniter PHP-解析SOAP(WDSL)结果

Codeigniter PHP-解析SOAP(WDSL)结果,php,json,codeigniter,soap,Php,Json,Codeigniter,Soap,我当前正在使用以下工具从Web服务检索信息: $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"]=>

我当前正在使用以下工具从Web服务检索信息:

$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删除了objectstdClass15 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" }

        }
    }
}

我知道这是一个嵌套数组,但是我如何解析它呢?

不需要编码/解码循环。试试这个:

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

这太棒了!你能解释一下你分解JSON的思想过程,以及你是如何得到:$response->GetDatabaseResult->DatabaseInformation的吗。我一直存在不知道何时应用->对象的问题,因为我上面发布的JSON看起来主要像关联数组。从var_dump输出开始确实需要一点思考,但只要看到objectstdClass,它就是->,只要看到数组,它就是[]查找或foreach。您可能需要尝试使用适当的键进行数组查找,但这应该是您所需要的全部。非常感谢您的建议。刚刚更新了您的答案。不确定您是否能提供帮助,但我正在再次调用该服务,但这次当没有数据时返回:objectstdClass15 1{[GetDatabaseResult]=>objectstdClass16 0{}与第一个结果不同的是,Key:DatabaseInformation被省略了,因此当它进入foreach循环时,它无法找到它$响应->获取数据库结果->数据库信息。如何检测它不存在?您可以使用isset$response->GetDatabaseResult->DatabaseInformation检查可用性。