Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 空关联数组SOAP类型转换_Php_Ruby On Rails_Ruby_Soap_Casting - Fatal编程技术网

Php 空关联数组SOAP类型转换

Php 空关联数组SOAP类型转换,php,ruby-on-rails,ruby,soap,casting,Php,Ruby On Rails,Ruby,Soap,Casting,我有一个客户机-服务器场景,其中PHP中的SoapClient类进行了类型转换,无法判断空数组是关联数组还是数值数组,因此默认为数值数组 所有公开的函数都使用基本类型,没有类 诸如数组(“something”=>123)之类的关联数组将转换为地图数据类型。但是,当同一数组为空时,例如array(),它将转换为Ruby端的数组。类型转换为object(object)array()将在Ruby端生成结构数据类型 这个参数有点复杂,不像上面那么简单: array( "options"=>

我有一个客户机-服务器场景,其中PHP中的SoapClient类进行了类型转换,无法判断空数组是关联数组还是数值数组,因此默认为数值数组

所有公开的函数都使用基本类型,没有类

诸如
数组(“something”=>123)
之类的关联数组将转换为地图数据类型。但是,当同一数组为空时,例如
array()
,它将转换为Ruby端的数组。类型转换为object
(object)array()
将在Ruby端生成结构数据类型

这个参数有点复杂,不像上面那么简单:

array(
    "options"=>array(
        "plans"=>array(
            0=>array(
                "name"=>"abc",
                "product_options"=>array(
                    "optional_key_determines_associative_array_data_type"=>0,
                ),
            ),
        ),
    ),
);
如果
“product\u options”
下的数组为空,它将转换为Ruby中的数组,而不是映射。同样,在PHP中将类型转换为object会在Ruby中生成一个结构

在PHP端,我可以做些什么使空的“关联”数组在Ruby端变成映射?

PHP5.3.3,使用SoapClient。
Ruby 1.8.7、Rails 2.3.2使用Action Web Service。

我可能错了,但据我的理解:

我确实相信你正在努力实现的目标是不可能的。数组(我们只说数组,没有对象)是数组。内容给定的结构使数组具有关联性或不具有关联性


空数组是不关联的。

您可以将数组包装在类中,并使用
APACHE\u MAP
作为编码参数。像这样:

array(
    "options"=>array(
        "plans"=>array(
            0=>array(
                "name"=>"abc",
                "product_options"=> new SoapVar(array(), APACHE_MAP),
            ),
        ),
    ),
);

好吧,这正是我的意思:为了克服这个问题,您需要更改脚本中的逻辑,而不是PHP。由于您无法定义要关联的PHP数组,因此需要修改接收脚本

如果是我,我不会发送空数组。将状态字段放入数组中。这可能是一个计算可用产品的字段,在本例中,该字段将计算为0。你会有一个更有意义的交流,而且无论发生什么,数组都会突然关联起来 e、 g

我要说的是你需要改变逻辑,你不能改变PHP

希望有帮助


Uwe

我尝试了SOAP\u USE_XSI\u ARRAY\u类型,它不适用于出现的问题。在PHP中添加虚拟数组键不是一个可接受的解决方案。一个丑陋的黑客将是扩展
SoapClient
&在
SoapClient::\u doRequest
中执行一些操作(xml将作为字符串发送)。是否使用过PHP-SOAP客户端。我不知道RubyonRails,但你可以看看我的问题。我们能看到你在我的电脑里使用的代码吗question@Wrikken“丑陋”是指玩弄XML会非常不完善?我知道这种情况,正如我在请求中特别指出的那样。这实际上是需要克服的(我没有否决)。我将在明天进行测试,我会回来报告。谢谢。产品选项是一个键值对配置。它将保持这种方式,我更喜欢在其根(调用者,PHP)修复问题。实际上存在一个products数字数组,product_选项是针对每个产品的。但是,这与关联数组的更一般问题无关。我连接到的RPC API由许多其他函数组成。
"product_options" => array ('products'=>0,'...'=>...) and so forth.