> 백엔드 개발 > PHP 튜토리얼 > PHP XML을 배열 코드로 변환

PHP XML을 배열 코드로 변환

WBOY
풀어 주다: 2016-07-25 09:04:13
원래의
773명이 탐색했습니다.
  1. // Xml 转 数组, 包括根键,忽略空元素和属性,尚有重大错误

  2. function xml_to_array( $xml )
  3. {
  4. $reg = "/<(\w )[^>]*?>([\x00-\xFF]*?)<\/>/";
  5. if(preg_match_all($reg, $xml, $matches))
  6. {
  7. $count = count($matches[0]);
  8. $arr = array();
  9. for($i = 0; $i < $count; $i )
  10. {
  11. $key = $matches[1][$i];
  12. $val = xml_to_array( $matches[2][$i] ); // 递归
  13. if(array_key_exists($key, $arr))
  14. {
  15. if(is_array($arr[$key]))
  16. {
  17. if(!array_key_exists(0,$arr[$key]))
  18. {
  19. $arr[$key] = array($arr[$key]);
  20. }
  21. }else{
  22. $arr[$key] = array($arr[$key]);
  23. }
  24. $arr[$key][] = $val;
  25. }else{
  26. $arr[$key] = $val;
  27. }
  28. }
  29. return $arr;
  30. }else{
  31. return $xml;
  32. }
  33. }

  34. // Xml 转 数组, 不包括根键

  35. function xmltoarray( $xml )
  36. {
  37. $arr = xml_to_array($xml);
  38. $key = array_keys($arr);
  39. return $arr[$key[0]];
  40. }

  41. // 类似 XPATH 的数组选择器

  42. function xml_array_select( $arr, $arrpath )
  43. {
  44. $arrpath = trim( $arrpath, '/' );
  45. if(!$arrpath) return $arr;
  46. $self = 'xml_array_select';
  47. $pos = strpos( $arrpath, '/' );
  48. $pos = $pos ? $pos : strlen($arrpath);
  49. $curpath = substr($arrpath, 0, $pos);
  50. $next = substr($arrpath, $pos);
  51. if(preg_match("/\[(\d )\]$/",$curpath,$predicate))
  52. {
  53. $curpath = substr($curpath, 0, strpos($curpath,"[{$predicate[1]}]"));
  54. $result = $arr[$curpath][$predicate[1]];
  55. }else $result = $arr[$curpath];
  56. if( is_array($arr) && !array_key_exists($curpath, $arr) )
  57. {
  58. die( 'key is not exists:' . $curpath );
  59. }
  60. return $self($result, $next);
  61. }

  62. // 如果输入的数组是全数字键,则将元素值依次传输到 $callback, 否则将自身传输给$callback

  63. function xml_array_each( $arr, $callback )
  64. {
  65. if(func_num_args()<2) die('parameters error');
  66. if(!is_array($arr)) die('parameter 1 shuld be an array!');
  67. if(!is_callable($callback)) die('parameter 2 shuld be an function!');
  68. $keys = array_keys($arr);
  69. $isok = true;
  70. foreach( $keys as $key ) {if(!is_int($key)) {$isok = false; break;}}
  71. if($isok)
  72. foreach( $arr as $val ) $result[] = $callback($val);
  73. else
  74. $result[] = $callback( $arr );
  75. return $result;
  76. }
  77. ?>

复制代码


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿