我可以强制 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;