PEAR is archived and read-only

This mirror preserves historical PEAR package releases and metadata so existing references remain available.

Home » XML » XML_Serializer » Bug #9633

Array indexes are not leveled.

Details

Submitted2006-12-15 22:52 UTC
Fromadmin at singlesburg dot com
StatusBogus
PackageXML_Serializer
PHP Version5.1.1
Roadmaps(Not assigned)

Comments

[2006-12-15 22:52 UTC] admin at singlesburg dot com

Description:
------------
When I import my XML doc into multi dimensional array, sinlge element index is not leveled as multiple elements indexes.

For example, in my XML, I have a single element as:
<subitems>
<msulabel>Index Page</msulabel>
<msufilename>index.php</msufilename>
</subitems>

this will generate an array without an index key, but when I have multiple elements as:

<subitems>
<msulabel>My Info</msulabel>
<msufilename>my_info.php?mm_id=6</msufilename>
</subitems>
<subitems>
<msulabel>My Login</msulabel>
<msufilename>my_login.php?mm_id=6</msufilename>
</subitems>

this will generate multiple index keys. The problem is that when I am building my array to export, it looks fine, but when I import, original first index (0) for a single array, it won't show up.

This cause a problem for me when I use foreach or while loops, because, loop expect a multi dimensional array.

Thank you.
Nizzy

Test script:
---------------
$unserializer = &new XML_Unserializer();
$unserializer->unserialize($xmldoc, true);
$menu_arr = $unserializer->getUnserializedData();

Expected result:
----------------
<?xml version="1.0"?>
<Menus>
<subitems>
<mmuid>1</mmuid>
<mmulabel>Main Menu</mmulabel>
<submenus>
<subitems>
<msulabel>Index Page</msulabel>
<msufilename>index.php</msufilename>
</subitems>
</submenus>
</subitems>
<subitems>
<mmuid>2</mmuid>
<mmulabel>My Control Panel</mmulabel>
<submenus>
<subitems>
<msulabel>My Info</msulabel>
<msufilename>my_info.php?mm_id=6</msufilename>
</subitems>
<subitems>
<msulabel>My Login</msulabel>
<msufilename>my_login.php?mm_id=6</msufilename>
</subitems>
........................
........................

Array
(
[subitems] => Array
(
[0] => Array
(
[mmuid] => 1
[mmulabel] => Main Menu
[submenus] => Array
(
[subitems] => Array
(
[0] => Array
(
[msulabel] => Index Page
[msufilename] => index.php
)
)
)
)

[1] => Array
(
[mmuid] => 2
[mmulabel] => My Control Panel
[submenus] => Array
(
[subitems] => Array
(
[0] => Array
(
[msulabel] => My Info
[msufilename] => my_info.php?mm_id=6
)

[1] => Array
(
[msulabel] => My Login
[msufilename] => my_login.php?mm_id=6
)
........................
........................

Actual result:
--------------
<?xml version="1.0"?>
<Menus>
<subitems>
<mmuid>1</mmuid>
<mmulabel>Main Menu</mmulabel>
<submenus>
<subitems>
<msulabel>Index Page</msulabel>
<msufilename>index.php</msufilename>
</subitems>
</submenus>
</subitems>
<subitems>
<mmuid>2</mmuid>
<mmulabel>My Control Panel</mmulabel>
<submenus>
<subitems>
<msulabel>My Info</msulabel>
<msufilename>my_info.php?mm_id=6</msufilename>
</subitems>
<subitems>
<msulabel>My Login</msulabel>
<msufilename>my_login.php?mm_id=6</msufilename>
</subitems>
........................
........................

Array
(
[subitems] => Array
(
[0] => Array
(
[mmuid] => 1
[mmulabel] => Main Menu
[submenus] => Array
(
[subitems] => Array
(
[msulabel] => Index Page
[msufilename] => index.php
)
)
)

[1] => Array
(
[mmuid] => 2
[mmulabel] => My Control Panel
[submenus] => Array
(
[subitems] => Array
(
[0] => Array
(
[msulabel] => My Info
[msufilename] => my_info.php?mm_id=6
)

[1] => Array
(
[msulabel] => My Login
[msufilename] => my_login.php?mm_id=6
)
........................
........................

[2006-12-16 17:12 UTC] admin at singlesburg dot com

Dear developer

This is very interesting. I finally solve the problem without even forcing the elements to be enum. I used the following built function to load my classes in PHP 5.1. If I use call you function outside this function, I get enum for single elements, but if I call your function inside that __autoload, then all single elements cannot be forced to be enum. FYI.

Thanks for help.
Nizzy

function __autoload($classname)
{
}