note 109032 deleted from function.xml-parse-into-struct by cmb

From: Date: Sun, 06 Oct 2019 08:26:08 +0000
Subject: note 109032 deleted from function.xml-parse-into-struct by cmb
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-212521@lists.php.net to get a copy of this message
Note Submitter: andy at andynformatics dot de ---- To get out of an XML-Structure like this: <root><element><subelement attribute="value">some text</subelement></element><anotherelement>Hello World</anotherelement></root> something like this: Array ( [tag] => ROOT [0] => Array ( [tag] => ELEMENT [0] => Array ( [tag] => SUBELEMENT [attributes] => Array ( [ATTRIBUTE] => value ) [value] => some text ) ) [1] => Array ( [tag] => ANOTHERELEMENT [value] => Hello World ) ) I have written a short and pretty simple function: <?php function xml2array($xml){ $opened = array(); $opened[1] = 0; $xml_parser = xml_parser_create(); xml_parse_into_struct($xml_parser, $xml, $xmlarray); $array = array_shift($xmlarray); unset($array["level"]); unset($array["type"]); $arrsize = sizeof($xmlarray); for($j=0;$j<$arrsize;$j++){ $val = $xmlarray[$j]; switch($val["type"]){ case "open": $opened[$val["level"]]=0; case "complete": $index = ""; for($i = 1; $i < ($val["level"]); $i++) $index .= "[" . $opened[$i] . "]"; $path = explode('][', substr($index, 1, -1)); $value = &$array; foreach($path as $segment) $value = &$value[$segment]; $value = $val; unset($value["level"]); unset($value["type"]); if($val["type"] == "complete") $opened[$val["level"]-1]++; break; case "close": $opened[$val["level"]-1]++; unset($opened[$val["level"]]); break; } } return $array; } ?>

« previous php.notes (#212521) next »