我试图在PHP 5中使用重复的对象进行SOAP调用:
<sources>
<source>
<name>somename</name>
<id>someid</id>
</source>
<source>
<name>somename</name>
<id>someid</id>
</source>
</sources>
以下代码适用于1个来源:
$data = [
'sources' => [
'source' => [
'name' => 'somename',
'id' => 'someid'
]
]
]
如何使用__soapCall函数对此数据进行SOAP调用,因为它需要一个数组,并且数组在PHP中不能有重复键。
到目前为止我已尝试过:
$data = [
'sources' => [
'source' => [
[
'name' => 'somename',
'id' => 'someid'
],
[
'name' => 'somename',
'id' => 'someid'
]
]
]
]
这会导致&#34; SOAP-ERROR:编码:对象没有&#39;名称&#39;属性&#34;
$data = [
'sources' => [
'source' => [
(object) [
'name' => 'somename',
'id' => 'someid'
],
(object) [
'name' => 'somename',
'id' => 'someid'
]
]
]
]
这也导致了一个&#34; SOAP-ERROR:编码:对象没有&#39;名称&#39;属性&#34;
$data = [
'sources' => [
[
'name' => 'somename',
'id' => 'someid'
],
[
'name' => 'somename',
'id' => 'someid'
]
]
]
这也导致了一个&#34; SOAP-ERROR:编码:对象没有&#39;源&#39;属性&#34 ;.我试过这个是因为我发现它是对类似问题的回答:Multiple elements of same name in PHP SOAP Call。
答案 0 :(得分:0)
我有found the solution myself。我已将XML消息编写为xml-string,我现在以编程方式将其转换为数组:
$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',
)),
),
))
)