我有以下代码:

$telnums = array(10, 20, 30);
$obj = new StdClass();
$obj->telnums = new StdClass();
foreach ($telnums as $telnum) {
    $obj->telnums = $telnum;
}

call_user_func(array($this->client, 'createDomain'), new SoapVar($obj, SOAP_ENC_OBJECT));

$ this-> client是SoapClient类的实例。

并生成以下请求:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="...">
    <SOAP-ENV:Body>
        <ns1:createDomain>
            <createDomainRequest>
                <telnums>30</telnums>
            </createDomainRequest>
        </ns1:createDomain>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

但是我需要
            <createDomainRequest>
                <telnums>10</telnums>
                <telnums>20</telnums>
                <telnums>30</telnums>
            </createDomainRequest>

我怎样才能做到这一点?

P.S .: PHP 5.2.6-3ubuntu4.5和Suhosin-Patch 0.9.6.2(cli)(内置:2010年1月6日22:25:33)

提前致谢!

最佳答案

我最近陷入了类似的情况,我发现这种模式通常可以解决问题。

$obj = new StdClass();
foreach ($telnums as $telnum) {
    $obj->telnums[] = $telnum;
}

之所以起作用,是因为它紧密模拟了WSDL规定的相同数据结构

10-04 18:22