php XML转换为数组的代码

WBOY
Lepaskan: 2016-07-25 09:04:13
asal
740 orang telah melayarinya
  1. // Xml 转 数组, 包括根键,忽略空元素和属性,尚有重大错误

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

  34. function xmltoarray( $xml )
  35. {
  36. $arr = xml_to_array($xml);
  37. $key = array_keys($arr);
  38. return $arr[$key[0]];
  39. }
  40. // 类似 XPATH 的数组选择器

  41. function xml_array_select( $arr, $arrpath )
  42. {
  43. $arrpath = trim( $arrpath, '/' );
  44. if(!$arrpath) return $arr;
  45. $self = 'xml_array_select';
  46. $pos = strpos( $arrpath, '/' );
  47. $pos = $pos ? $pos : strlen($arrpath);
  48. $curpath = substr($arrpath, 0, $pos);
  49. $next = substr($arrpath, $pos);
  50. if(preg_match("/\\[(\\d+)\\]$/",$curpath,$predicate))
  51. {
  52. $curpath = substr($curpath, 0, strpos($curpath,"[{$predicate[1]}]"));
  53. $result = $arr[$curpath][$predicate[1]];
  54. }else $result = $arr[$curpath];
  55. if( is_array($arr) && !array_key_exists($curpath, $arr) )
  56. {
  57. die( 'key is not exists:' . $curpath );
  58. }
  59. return $self($result, $next);
  60. }
  61. // 如果输入的数组是全数字键,则将元素值依次传输到 $callback, 否则将自身传输给$callback

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


Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan