PHP SOAP-Client多个元素

时间:2014-12-08 15:23:53

标签: php arrays soap

我想提出这样的请求,可以选择任意数量的“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,就像上面的请求一样?

我希望有人可以帮助我...

1 个答案:

答案 0 :(得分: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
}