PHP SOAP-клиент несколько элементов

0

Я хочу сделать такой запрос, где необязательно указывать любое количество "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, например, в запросе выше?

Я надеюсь, что кто-то может мне помочь...

Теги:
arrays
soap

1 ответ

0
Лучший ответ

Я столкнулся с той же проблемой. Единственный способ сделать это - передать индексированный массив. 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
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню