我想提出这样的请求,可以选择任意数量的“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,就像上面的请求一样?
我希望有人可以帮助我...
答案 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
}