ホームページ >バックエンド開発 >PHPチュートリアル >php XMLから配列コードへの変換

php XMLから配列コードへの変換

WBOY
WBOYオリジナル
2016-07-25 09:04:13770ブラウズ
  1. // 空の要素と属性を無視して、ルート キーを含む XML を配列に変換しますが、依然として重大なエラーが発生します

  2. function xml_to_array( $xml )
  3. {
  4. $reg = "/ <(\w+)[^>]*?>([\x00-\xFF]*?)<\/\1>/";
  5. if(preg_match_all($reg, $xml, $一致) )
  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 = トリム( $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( 'キーが存在しません:' . $curpath );
  58. }
  59. return $self($result, $next);
  60. }< /p>
  61. // 入力配列がすべて数値キーの場合、要素値は $callback に順番に転送されます。それ以外の場合は、自身を $callback

  62. function xml_array_each( $arr, $callback )
  63. {
  64. if (func_num_args() if(!is_array($arr)) die('パラメータ 1 は配列でなければなりません!');
  65. if(! is_callable($callback)) die ('パラメータ 2 は関数でなければなりません!');
  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. ?>

コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。