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;
}