本文实例讲述了PHP实现XML与数据格式进行转换类。分享给大家供大家参考。具体如下:
PHP;">
$val) {
if ($priority == 'tag') $attributes_data[$attr] = $val;
else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
}
}
// See tag status and do the needed.
if ($type == "open") { // The starting of the tag ''
$parent[$level-1] = &$current;
if (!is_array($current) or (!in_array($tag,array_keys($current)))) { // Insert New tag
$current[$tag] = $result;
if ($attributes_data) $current[$tag . '_attr'] = $attributes_data;
$repeated_tag_index[$tag . '_' . $level] = 1;
$current = &$current[$tag];
} else { // There was another element with the same tag name
if (isset($current[$tag][0])) { // If there is a 0th element it is already an array
$current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
$repeated_tag_index[$tag . '_' . $level]++;
} else { // This section will make the value an array if multiple tags with the same name appear together
$current[$tag] = array($current[$tag],$result); //This will combine the existing item and the new item together to make an array
$repeated_tag_index[$tag . '_' . $level] = 2;
if (isset($current[$tag . '_attr'])) { // The attribute of the last(0th) tag must be moved as well
$current[$tag]['0_attr'] = $current[$tag . '_attr'];
unset($current[$tag . '_attr']);
}
}
$last_item_index = $repeated_tag_index[$tag . '_' . $level]-1;
$current = &$current[$tag][$last_item_index];
}
} elseif ($type == "complete") { // Tags that ends in 1 line ' '
// See if the key is already taken.
if (!isset($current[$tag])) { // New Key
$current[$tag] = $result;
$repeated_tag_index[$tag . '_' . $level] = 1;
if ($priority == 'tag' and $attributes_data) $current[$tag . '_attr'] = $attributes_data;
} else { // If taken,put all things inside a list(array)
if (isset($current[$tag][0]) and is_array($current[$tag])) { // If it is already an array...
// ...push the new element into that array.
$current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
if ($priority == 'tag' and $get_attributes and $attributes_data) {
$current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
}
$repeated_tag_index[$tag . '_' . $level]++;
} else { // If it is not an array...
$current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value
$repeated_tag_index[$tag . '_' . $level] = 1;
if ($priority == 'tag' and $get_attributes) {
if (isset($current[$tag . '_attr'])) { // The attribute of the last(0th) tag must be moved as well
$current[$tag]['0_attr'] = $current[$tag . '_attr'];
unset($current[$tag . '_attr']);
}
if ($attributes_data) {
$current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
}
}
$repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken
}
}
} elseif ($type == 'close') { // End of tag ' '
$current = &$parent[$level-1];
}
}
return($xml_array);
}
// Array to XML
class array2xml {
public $output = "\n";
public $sub_item = array();
public function __construct($array) {
$sub_item = array();
$this->output .= $this->xmlmake($array);
}
public function xmlmake($array,$fk = '') {
$xml = '';
global $sub_item;
foreach ($array as $key => $value) {
if (is_array($value)) {
if (is_numeric($key)) {
$this->sub_item=array_merge($this->sub_item,array($fk));
$xml .= "<{$fk}>" . $this->xmlmake($value,$key) . "{$fk}>";
} else {
$xml .= "<{$key}>" . $this->xmlmake($value,$key) . "{$key}>";
}
} else {
$xml .= "<{$key}>{$value}{$key}>\n";
}
}
return $xml;
}
public function output(){
foreach($this->sub_item as $t){
$this->output = str_replace("<{$t}><{$t}>","<{$t}>",$this->output);
$this->output = str_replace("{$t}>{$t}>","{$t}>",$this->output);
}
return $this->output;
}
}
希望本文所述对大家的PHP程序设计有所帮助。
原文链接:https://www.f2er.com/php/21401.html