使用PHP使用重复键进行SOAP调用

使用PHP使用重复键进行SOAP调用,php,soap,Php,Soap,我尝试在PHP5中使用重复对象执行SOAP调用,如下所示: <sources> <source> <name>somename</name> <id>someid</id> </source> <source> <name>somename</name> <id>someid</id> </source

我尝试在PHP5中使用重复对象执行SOAP调用,如下所示:

<sources>
  <source>
    <name>somename</name>
    <id>someid</id>
  </source>
 <source>
    <name>somename</name>
    <id>someid</id>
  </source>
</sources>
如何使用uusoapcall函数对这些数据进行SOAP调用,因为它需要一个数组,而数组在PHP中不能有重复的键

到目前为止,我所尝试的:

$data = [
  'sources' => [
    'source' => [
      [
        'name' => 'somename',
        'id' => 'someid'
      ],
      [
        'name' => 'somename',
        'id' => 'someid'
      ]
    ]
  ]
]
这将导致“SOAP-ERROR:编码:对象没有'name'属性”

这也会导致“SOAP-ERROR:编码:对象没有'name'属性”

这还会导致“SOAP-ERROR:编码:对象没有“源”属性”。我尝试了这个,因为我发现它是对一个类似问题的回答:。

我有。我已将XML消息编写为XML字符串,现在以编程方式将其转换为数组:

$sourcesAsXml = "<root><source><name>a</name></source><source><name>b</name></source></root>"
$dataArray = ['sources' => json_decode(json_encode(simplexml_load_string($sourcesAsXml)))]

我认为PHPSOAPClient需要一个对象而不是数组。尝试将
$data
转换为对象<代码>$data=(对象)$data我不认为这是解决方案,因为当我只发布一个源代码时,这种格式可以很好地工作(参见第一个示例,刚刚添加)
$data = [
  'sources' => [
    'source' => [
      (object) [
        'name' => 'somename',
        'id' => 'someid'
      ],
      (object) [
        'name' => 'somename',
        'id' => 'someid'
      ]
    ]
  ]
]
$data = [
  'sources' => [
    [
      'name' => 'somename',
      'id' => 'someid'
    ],
    [
      'name' => 'somename',
      'id' => 'someid'
    ]
  ]
]
$sourcesAsXml = "<root><source><name>a</name></source><source><name>b</name></source></root>"
$dataArray = ['sources' => json_decode(json_encode(simplexml_load_string($sourcesAsXml)))]
array ('sources' =>
stdClass::__set_state(array(
   'source' =>
  array (
    0 =>
    stdClass::__set_state(array(
       'name' => 'a',
    )),
    1 =>
    stdClass::__set_state(array(
       'name' => 'b',
    )),
  ),
))
)