3v4l.org

run code in 300+ PHP versions simultaneously
<?php function & XML_serialize(&$data, $level = 0, $prior_key = NULL){ #assumes a hash, keys are the variable names $xml_serialized_string = ""; while(list($key, $value) = each($data)){ $inline = false; $numeric_array = false; $attributes = ""; #echo "My current key is '$key', called with prior key '$prior_key'<br>"; if(!strstr($key, " attr")){ #if it's not an attribute if(array_key_exists("$key attr", $data)){ while(list($attr_name, $attr_value) = each($data["$key attr"])){ #echo "Found attribute $attribute_name with value $attribute_value<br>"; $attr_value = &htmlspecialchars($attr_value, ENT_QUOTES); $attributes .= " $attr_name=\"$attr_value\""; } } if(is_numeric($key)){ #echo "My current key ($key) is numeric. My parent key is '$prior_key'<br>"; $key = $prior_key; }else{ #you can't have numeric keys at two levels in a row, so this is ok #echo "Checking to see if a numeric key exists in data."; if(is_array($value) and array_key_exists(0, $value)){ # echo " It does! Calling myself as a result of a numeric array.<br>"; $numeric_array = true; $xml_serialized_string .= XML_serialize($value, $level, $key); } #echo "<br>"; } if(!$numeric_array){ $xml_serialized_string .= str_repeat("\t", $level) . "<$key$attributes>"; if(is_array($value)){ $xml_serialized_string .= "\r\n" . XML_serialize($value, $level+1); }else{ $inline = true; $xml_serialized_string .= htmlspecialchars($value); } $xml_serialized_string .= (!$inline ? str_repeat("\t", $level) : "") . "</$key>\r\n"; } }else{ #echo "Skipping attribute record for key $key<bR>"; } } if($level == 0){ $xml_serialized_string = "<?xml version=\"1.0\" ?>\r\n" . $xml_serialized_string; return $xml_serialized_string; }else{ return $xml_serialized_string; } }

preferences:
35.69 ms | 402 KiB | 5 Q