我正在尝试在 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'
]
]
]
]
这会导致“SOAP 错误:编码:对象没有‘名称’属性”。
$data = [
'sources' => [
'source' => [
(object) [
'name' => 'somename',
'id' => 'someid'
],
(object) [
'name' => 'somename',
'id' => 'someid'
]
]
]
]
这也会导致“SOAP-ERROR:编码:对象没有‘名称’属性”。
$data = [
'sources' => [
[
'name' => 'somename',
'id' => 'someid'
],
[
'name' => 'somename',
'id' => 'someid'
]
]
]
这也会导致“SOAP 错误:编码:对象没有‘源’属性”。我试过这个是因为我发现它是一个类似问题的答案:Multiple elements of same name in PHP SOAP Call .
最佳答案
我有found the solution myself .我已将 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)))]
输出如下:
array ('sources' =>
stdClass::__set_state(array(
'source' =>
array (
0 =>
stdClass::__set_state(array(
'name' => 'a',
)),
1 =>
stdClass::__set_state(array(
'name' => 'b',
)),
),
))
)
关于php - 使用 PHP 使用重复键进行 SOAP 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48403809/