php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
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
Votes:2
Avg. Score:4.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:1 (50.0%)
Same OS:0 (0.0%)
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

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [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
Dmitry,

I don't mind it using integers at all, as long as it doesn't start renumbering from 0 to N. Thanks for the fix.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Mar 19 08:01:29 2024 UTC