PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

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)
{
}