Home » XML » XML_Serializer » Bug #4325
Can't serialize an array with multiple identical keys
Details
| Submitted | 2005-05-11 07:23 UTC |
|---|---|
| From | consulting at jtroiano dot com |
| Status | Bogus |
| Package | XML_Serializer |
| PHP Version | 4.3.7 |
| OS | Linux 2.4.25-ow1 |
| Roadmaps | (Not assigned) |
Comments
[2005-05-11 07:23 UTC] consulting at jtroiano dot com
Description:
------------
PEAR.php,v 1.80
Serializer.php,v 1.34
Util.php,v 1.24
When attempting to serialize an associative array
containing multiple keys of the same name (in this case
'field'), only the last key/value pair is returned as an
XML element.
Reproduce code:
---------------
$this->_xmlQuery = array(
"requestby" => array(
"office" => "OfficeID",
"branch" => "BranchID",
"webid" => "WebID",
"password" => "Password"
),
"query" => array(
"querytype" => "customfieldlistbywhere",
"querydata" => "SQL WHERE clause",
"fieldlist" => array(
"field" => "cl_class",
"field" => "mls_num",
"field" => "lp_list_price",
"field" => "sf_square_feet"
)
)
);
$result = $serializer->serialize($this->_xmlQuery);
Expected result:
----------------
Expected to have multiple <field> elements as children
to the <fieldlist> element. The <field> elements tell
the database server the exact subset of data to return
in reponse to the request.
FWIW, I tried tweaking the loop structures w/in
_serializeArray() myself, to no avail. Wound up hand-
coding the XML for the contents of <fieldlist>, setting
replaceEntities to XML_SERIALIZER_ENTITIES_NONE, and
calling htmlspecialchars() on the string passed into
<querydata> - as a work-around. It works fine that way.
The package itself has greatly simplified my task.
Thanks for the good work.
Actual result:
--------------
<fieldlist><field>sf_square_feet</field></fieldlist>
[2005-05-11 22:22 UTC] consulting at jtroiano dot com
Ah, I see. Each assignment was overwriting the
previous. I guess my "work-around" is actually the only
way to build such a structure from an array.
Sorry for wasting your time.