免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2830 | 回复: 0
打印 上一主题 下一主题

PHP4与PHP5差别之simplexml_load_string [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-03 15:32 |只看该作者 |倒序浏览
最近让我怨念很深的原因就是这个函数。但让我更郁闷的是搞定了这个函数后发现还有个更大的,几乎无法解决的难题。说白了就是,你这个问题解决不解决都无关紧要了。因为美丽的结果你永远无法看到……
  旧版处理XML转换成数组的方式是使用XML 语法解析函数,xml_parser_createxml_parser_set_optionxml_parse_into_struct等函数,写法比较复杂,妞妞基地好处是可以兼容PHP4。
[codes=php]
function xml_to_array($xml)
{
$values = array();
$index = array();
$array = array();
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
if(0===xml_parse_into_struct($parser, $xml, $values, $index)) {
return false;
}
xml_parser_free($parser);
$i = 0;
$name = $values[$i]['tag'];
$array[$name] = isset($values[$i]['attributes']) ? $values[$i]['attributes'] : '';
$array[$name] = struct_to_array($values, $i);
return $array[$name];
}
function struct_to_array($values, &$i)
{
$child = array();
if (isset($values[$i]['value'])) array_push($child, $values[$i]['value']);
while ($i++ )) {
switch ($values[$i]['type']) {
case 'cdata':
array_push($child, $values[$i]['value']);
break;
case 'complete':
$name = $values[$i]['tag'];
if( !empty($name)){
$child[$name]= isset($values[$i]['value'])?($values[$i]['value']):'';
if(isset($values[$i]['attributes'])) {
$child[$name] = $values[$i]['attributes'];
}
}
break; 97
case 'open':
$name = $values[$i]['tag'];
$size = isset($child[$name]) ? sizeof($child[$name]) : 0;
$child[$name][$size] = struct_to_array($values, $i);
break;
case 'close':
return $child;
break;
}
}
return $child;
}
[/codes]
新版ThinkPHP采用了SimpleXML类库函数,97ai仅仅使用了simplexml_load_string函数,除了写法简化不少,效率也有数量级的提高(对于大的XML数据解析尤其明显),不过只能用于PHP5以上版本。
[codes=php]
function xml_to_array($xml)
{
$array = (array)(simplexml_load_string($xml));
foreach ($array as $key=>$item){
$array[$key] = struct_to_array((array)$item);
}
return $array;
}
function struct_to_array($item) {
if(!is_string($item)) {
$item = (array)$item;
foreach ($item as $key=>$val){
$item[$key] = struct_to_array($val);
}
}
return $item;
}
[/codes]


原始地址:http://www.97xxoo.org/article/1/2009/20090203877.shtml
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP