Codeigniter PHP-解析SOAP(WDSL)结果
我当前正在使用以下工具从Web服务检索信息: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"]=>
$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检查可用性。