note 109032 modified in function.xml-parse-into-struct by danbrown
| From: | danbrown@php.net | Date: | Thu, 14 Jun 2012 15:24:04 +0000 |
| Subject: | note 109032 modified in function.xml-parse-into-struct by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-188607@lists.php.net to get a copy of this message | ||
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; } ?>
--was--
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:
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;
}
http://php.net/manual/en/function.xml-parse-into-struct.php