我可以强制 SoapClient 将 return 数组作为数组吗?
Can I force SoapClient to return arrays as arrays?
我正在使用 SoapClient 获取一些数据。我从其中一个电话中得到了这个结果:
stdClass Object
(
[payTransIncome] => stdClass Object
(
[item] => stdClass Object
(
[payTransId] => 141281
[payTransItId] => 630260
[payTransBuyerId] => 1311
)
)
)
但是这个 WebAPI 的文档说 payTransIncome
是一个数组。
在我看来,SoapClient 找到了一个单元素数组并将其转换为单个 stdClass 对象。这使得解析变得更加困难,因为有时我认为它实际上可能 return 多于 1 个元素。
当然我可以到处检查 if (is_array())
但也许有一种简单、更优雅的方法?
请尝试在您的 SoapClient 选项中将 features
设置为 SOAP_SINGLE_ELEMENT_ARRAYS
:
$client = new SoapClient("some.wsdl", ['features' => SOAP_SINGLE_ELEMENT_ARRAYS]);
在 PHP 的旧版本中,SoapClient 可能会忽略“功能”选项。
那是我使用 PHP 5.3 的情况。
但是您始终可以将 stdClass 的对象转换为数组:
$client = new SoapClient("some.wsdl");
$objResult = $client->__soapCall("someFunction");
$objArray = (array)$objResult;
我正在使用 SoapClient 获取一些数据。我从其中一个电话中得到了这个结果:
stdClass Object
(
[payTransIncome] => stdClass Object
(
[item] => stdClass Object
(
[payTransId] => 141281
[payTransItId] => 630260
[payTransBuyerId] => 1311
)
)
)
但是这个 WebAPI 的文档说 payTransIncome
是一个数组。
在我看来,SoapClient 找到了一个单元素数组并将其转换为单个 stdClass 对象。这使得解析变得更加困难,因为有时我认为它实际上可能 return 多于 1 个元素。
当然我可以到处检查 if (is_array())
但也许有一种简单、更优雅的方法?
请尝试在您的 SoapClient 选项中将 features
设置为 SOAP_SINGLE_ELEMENT_ARRAYS
:
$client = new SoapClient("some.wsdl", ['features' => SOAP_SINGLE_ELEMENT_ARRAYS]);
在 PHP 的旧版本中,SoapClient 可能会忽略“功能”选项。 那是我使用 PHP 5.3 的情况。 但是您始终可以将 stdClass 的对象转换为数组:
$client = new SoapClient("some.wsdl");
$objResult = $client->__soapCall("someFunction");
$objArray = (array)$objResult;