ext/soap returning associative array as indexed without using WSDL
| Bug #41097 | ext/soap returning associative array as indexed without using WSDL | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Submitted: | 2007-04-16 06:59 UTC | Modified: | 2007-05-03 06:40 UTC |
|
||||||||||
| From: | r dot korving at xit dot nl | Assigned: | dmitry (profile) | |||||||||||
| Status: | Closed | Package: | SOAP related | |||||||||||
| PHP Version: | 5.2.1 | OS: | Debian | |||||||||||
| Private report: | No | CVE-ID: | None | |||||||||||
[2007-04-16 06:59 UTC] r dot korving at xit dot nl
Description:
------------
Returning array('5' => 'Foo', '10' => 'Bar') from a SoapServer handler class ends up as array(0 => 'Foo', 1 => 'Bar') at the client end. But array('a' => 'Foo', 'b' => 'Bar') does end up correctly. It only fails with numeric keys. I'm not using WSDL in this case. I think integer keys that are not in a simple 0..n range should end up in an associative array, not indexed with new 0..n keys.
Reproduce code:
---------------
<?php
class MyHandler
{
public function getData()
{
return array('5' => 'Foo', '10' => 'Bar');
}
}
// initialize soap-server:
$soap = new SoapServer(null, array('uri' => 'http://uri/', 'encoding' => 'ISO-8859-1'));
$soap->setClass('MyHandler');
$soap->handle();
?>
Expected result:
----------------
array('5' => 'Foo', '10' => 'Bar')
Actual result:
--------------
array(0 => 'Foo', 1 => 'Bar')
Patches
Pull Requests
History
AllCommentsChangesGit/SVN commits
[2007-05-02 08:22 UTC] dmitry@php.net
Your expectation is wrong because PHP converts numeric string indeces into integer. $ sapi/cli/php -r 'var_dump(array("5" => "Foo", "10" => "Bar"));' array(2) { [5]=> string(3) "Foo" [10]=> string(3) "Bar" } BTW I fixed ext/soap to use Apache:Map instead of SOAP-ENC:Array in case of partial arrays (missing indeces). FIXED in CVS HEAD and PHP_5_2.[2007-05-03 06:40 UTC] r dot korving at xit dot nl