У меня есть функция веб-сервиса, которая возвращает массив элементов в PHP-Client. В зависимости от количества элементов возвращаемый тип PHP по-разному. Если функция возвращает один элемент, то тип PHP является stdClass
если функция возвращает более одного элемента, тип PHP – это array
. В любом случае это должен быть array
. Что я могу сделать для этого?
var_dump
результата функции веб-сервиса выглядит следующим образом:
array(3) { ["filterErg"]=> object(stdClass)#37 (1) { ["item"]=> object(stdClass)#38 (9) ...
array(3) { ["filterErg"]=> object(stdClass)#37 (1) { ["item"]=> array(16) ...
Имя функции – getFilter
а соответствующие части файла WSDL:
<types> <schema ...> <complexType name="arrayFilter"> <sequence> <element name="item" type="ns1:stFilter" minOccurs="0" maxOccurs="unbounded" nillable="true"/> </sequence> </complexType> ... </schema> </types> <message name="getFilterResponse"> <part name="filterErg" type="ns1:arrayFilter"/> <part name="functionResult" type="xsd:int"/> <part name="outErr" type="xsd:string"/> </message> <portType name="ADServicePortType"> <operation name="getFilter"> <documentation>Service definition of function ns1__getFilter</documentation> <input message="tns:getFilter"/> <output message="tns:getFilterResponse"/> </operation> ... </portType> <binding name="ADService" type="tns:ADServicePortType"> <SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="getFilter"> <SOAP:operation style="rpc" soapAction=""/> <input> <SOAP:body use="encoded" namespace="urn:ADService" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <SOAP:body use="encoded" namespace="urn:ADService" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> ... </binding>
Изменяйте переменную из объекта на массив, содержащий объект:
if (is_object($variable)) { $variable = array($variable); }
Или, более конкретно, в вашем случае:
if (is_object($result["filterErg"]->item)) { $result["filterErg"]->item = array($result["filterErg"]->item); }
Вы можете использовать параметр SOAP_SINGLE_ELEMENT_ARRAYS при создании SoapClient
$soapConfig = array( 'soap_version' => SOAP_1_2, 'features' => SOAP_SINGLE_ELEMENT_ARRAYS, 'trace' => true ); $client = new SoapClient('http://localhost:8070/Services.wsdl', $soapConfig);