ID: 41490 Updated by: [EMAIL PROTECTED] Reported By: simon at highlyillogical dot org -Status: Assigned +Status: Feedback Bug Type: SOAP related Operating System: Windows/Linux PHP Version: 5.2.2 Assigned To: dmitry New Comment:
I don's see a way to fix this. PHP is not able to keep several elemtns with the same names in object or array. So it is not possible to keep order of elements with different names. You can probaly change WSDL to have a sequence of 'words', where each word is an element defined as extension of type 'string' with 'part_of_speach' attribute. So you'll have to pass something like this: <sentence> <word part_of_speach="other">The</word> <word part_of_speach="noun">cat</word> <word part_of_speach="other">is</word> <word part_of_speach="verb">playing</word> <word part_of_speach="other">with</word> <word part_of_speach="noun">string</word> </sentence> Previous Comments: ------------------------------------------------------------------------ [2007-05-24 13:36:13] simon at highlyillogical dot org Description: ------------ When the PHP soap client parses a SOAP response that contains multiple recurrences of an <xsd:choice maxOccurs="unbounded"> element, the ordering of elements can be lost, as the results are grouped by element type. For example, take the following complex type: <xsd:complexType name="sentence"> <xsd:choice maxOccurs="unbounded"> <xsd element name="noun" type="xsd:string" /> <xsd element name="verb" type="xsd:string" /> <xsd element name="other" type="xsd:string" /> </xsd:choice> </xsd:type> This type can describe a sentence, with one element per word. An example sentence might be: <sentence> <other>The</other> <noun>cat</noun> <other>is</other> <verb>playing</verb> <other>with</other> <noun>string</noun> </sentence> When PHP parses this, it groups the elements by type. Thus, a sentence which reads "The cat is playing with string", is mangled to read "cat string playing The is with" I've posted a wsdl to demonstrate the problem at: http://zx81.highlyillogical.org/~simon/phpbugtest/phpbugtest.wsdl A valid XML response similar to the case above is at: http://zx81.highlyillogical.org/~simon/phpbugtest/bugtest.xml To reproduce the problem, simply call the bugtest operation on the above wsdl. It will always return the above xml response. Reproduce code: --------------- $client = new SoapClient ( "http://zx81.highlyillogical.org/~simon/phpbugtest/phpbugtest.wsdl" ) ; // we're just hitting an XML file, so we don't care about the input $result = $client->bugtest ( ) ; var_dump ( $result ) ; Expected result: ---------------- An output with the resulting objects are presented in the order in which they occurred in the document. Actual result: -------------- object(stdClass)#2 (3) { ["noun"]=> array(2) { [0]=> string(3) "cat" [1]=> string(6) "string" } ["verb"]=> string(7) "playing" ["other"]=> array(3) { [0]=> string(3) "The" [1]=> string(2) "is" [2]=> string(4) "with" } } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=41490&edit=1