Version: 1.1
Type: Function
Category: Other
License: GNU General Public License
Description: Function that takes the values array (3rd parameter) from xml_parse_into_struct, which is a 1-D array, and parses it into a nested array for easier traversal.
/*
XMLST_To_NESTED : by Dan Watt (danwatt@mediaone.net)
Full Name : XML Structure to nested array
Purpose : xml_parse_into_struct produces two 1-dimensional arrays: One for all of the tags (values), and one for "looking up" (index)
these tags. Well, this function takes the values array and parses it into a nested array for much faster traversal.
Notes : Not 100% Tested. Preserves all of the original structure data. Not tested on large files, so I can't guarantee speed at all
Why : I was not pleased in having to either: 1) manually traverse and splice the value array, or 2) Using the index array to find
the position of a tag (which also added the trouble of determining the parents of a given element). This method makes the data
a little more structured for my purposes, and I figured someone else might find it handy.
Version 1.01: Fixed minor count issue, $c-$i-2 to $c-$i-1. Was preventing close tags from being placed in the appropriate place.
*/
function XMLST_To_NESTED($xmlstruct)
{
$ret=array();
for ($i=0; $i<count($xmlstruct); $i++)
{
$ret[$i]=$xmlstruct[$i];
if ($xmlstruct[$i]["type"]=="open")
{
$found=FALSE;
for ($c=$i+1; (($c<count($xmlstruct)) AND ($found!=TRUE)); $c++)
if (($xmlstruct[$c]["level"]==$xmlstruct[$i]["level"]) AND ($xmlstruct[$c]["tag"]==$xmlstruct[$i]["tag"]) AND ($xmlstruct[$c]["type"]=="close"))
{
$found=TRUE;
$ret[$i]["subtags"]=XMLST_To_NESTED(array_splice($xmlstruct,$i+1,$c-$i-1));
}
}
}
return $ret;
}