Я хочу сделать такой запрос, где необязательно указывать любое количество "SomeNumber" в качестве входных данных:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope><SOAP-ENV:Body></
<ns1:Request>
<ns1:SomeNumber>42</ns1:SomeNumber>
<ns1:SomeNumber>1</ns1:SomeNumber>
<ns1:SomeNumber>4</ns1:SomeNumber>
<ns1:SomeCode>12</ns1:SomeCode>
</ns1:Request>
</SOAP-ENV:Body></SOAP-ENV:Envelope>
В тех случаях, когда у меня только 1 SomeNumber, он работает нормально, но когда я хочу запросить более одного результата, я получаю только 1 результат. (Это нормально, потому что значение SomeNumber изменяется только для каждого значения в $ arrChr).
$objClient = new SOAPClient("wsdl", array("trace" => 1));
$arrRequest = array('Request' => array('SomeNumber' => $arrChr[0],
'SomeNumber' => $arrChr[1],
'SomeCode' => $intSpeciescode));
$objResult = $objClient->something($arrRequest);
Но есть ли способ обрабатывать несколько SomeNumber, например, в запросе выше?
Я надеюсь, что кто-то может мне помочь...
Я столкнулся с той же проблемой. Единственный способ сделать это - передать индексированный массив. SOAP-сервер должен справиться с этим без каких-либо проблем (по крайней мере, для меня). Если я понял, что $arrChr
уже является индексированным массивом, вы можете использовать что-то вроде этого:
$objClient = new SOAPClient("wsdl", array("trace" => 1));
$arrRequest = array(
'Request' => array(
'SomeNumber' => $arrChr,
'SomeCode' => $intSpeciescode
)
);
$objResult = $objClient->something($arrRequest);
Когда вы обрабатываете результат, и в результате есть поле, которое также повторяется, тогда PHP SOAPClient также сводит его к индексированному массиву. Как я их обрабатываю, обычно используется is_array()
:
if (is_array($objResult->SomeNumber)) {
foreach ($objResult as $result) {
// do stuff on $result
}
} else {
// do stuff on $objResult->SomeNumber
}