空关联数组SOAP类型转换
我有一个客户端服务器场景,其中PHP中的SoapClient类进行类型转换,无法判断空数组是关联的还是数字的,因此默认为数字。
所有公开的函数都使用基本类型,没有类。
诸如array("something"=>123)
类的关联数组将转换为地图数据类型。 但是,当相同的数组为空时,例如array()
,它将转换为Ruby端的数组。 类型转换为object (object)array()
将导致Ruby端的struct数据类型。
这个论点有点复杂,不像上面那么简单:
array( "options"=>array( "plans"=>array( 0=>array( "name"=>"abc", "product_options"=>array( "optional_key_determines_associative_array_data_type"=>0, ), ), ), ), );
如果"product_options"
下的数组为空,则它将转换为Ruby中的数组,而不是映射。 再一次,在PHP中输入到对象的类型导致Ruby中的结构。
我可以在PHP方面做些什么来使空的“关联”数组最终成为Ruby方面的地图?
PHP 5.3.3,使用SoapClient。 Ruby 1.8.7,Rails 2.3.2使用Action Web Service。
您可以使用APACHE_MAP
作为编码参数将数组包装在SoapVar
类中。 像这样:
array( "options"=>array( "plans"=>array( 0=>array( "name"=>"abc", "product_options"=> new SoapVar(array(), APACHE_MAP), ), ), ), );
嗯,这正是我的意思:要解决这个问题,你需要改变脚本中的逻辑 – 而不是PHP。 由于无法将 PHP数组定义为关联,因此需要修改接收脚本。
如果是我,我不会发送一个空数组。 将状态字段放入数组中。 这可能是一个计算可用产品的字段,在这种情况下将计为0.您将有一个更有意义的通信和数组IS突然关联,无论例如什么
"product_options" => array ('products'=>0,'...'=>...) and so forth.
我说的是你需要改变逻辑,你不能改变PHP。
希望有所帮助,
乌韦
我可能在这里错了,但据我的理解:
我确实相信你想要实现的目标是不可能的。 数组(我们只讨论数组,没有对象)是一个数组。 内容给出的结构使数组关联或不关联。
空数组不是关联的。
- Web抓取JAVASCRIPT内容的语言
- ImageMagick:这个convert-command在做什么?
- 访问者模式对动态类型语言有用吗?
- Python / Django / Ruby / Rails / PHP中的LMS
- Ruby,PHP或Perl可以为像Python这样的代码创建预编译文件吗?
- 第二部分:如何使Ruby AES-256-CBC和PHP MCRYPT_RIJNDAEL_128一起发挥得很好
- 有没有办法轻松地将Ruby代码转换为PHP?
- 是否可以在Ruby中自动初始化多维哈希数组,就像在PHP中一样?
- 如何使Ruby AES-256-CBC和PHP MCRYPT_RIJNDAEL_128一起发挥得很好