【php】XMLを配列に変換する
問題
phpで、XMLを配列に変換したいです!そんな便利な関数ありますか?
答え
名前空間ありのXMLだとそうもいかないけど、単純なXMLの場合、以下3行でとても良い感じに配列になる。
$x = simplexml_load_string($xml); $j = json_encode($x); $a = json_decode($j, true);
無理やり1行にすると、
json_decode(json_encode(simplexml_load_string($xml)), true);
例
<?php $xml = '<?xml version="1.0" encoding="UTF-8"?> <テスト> <abc>abcdefghijklmn</abc> <テスト1>てすてす</テスト1> <テスト2> <テスト21>ふが</テスト21> <テスト22>ほげ</テスト22> </テスト2> <テスト2> <テスト21>ふが</テスト21> <テスト22>ほげ</テスト22> </テスト2> <テスト3>123456789</テスト3> </テスト>'; $sx = simplexml_load_string($xml); $json = json_encode($sx); $a = json_decode($json, true); var_dump($a);
結果
array(4) { ["abc"]=> string(14) "abcdefghijklmn" ["テスト1"]=> string(12) "てすてす" ["テスト2"]=> array(2) { [0]=> array(2) { ["テスト21"]=> string(6) "ふが" ["テスト22"]=> string(6) "ほげ" } [1]=> array(2) { ["テスト21"]=> string(6) "ふが" ["テスト22"]=> string(6) "ほげ" } } ["テスト3"]=> string(9) "123456789" }
別解
なお、array にキャストすると、2階層目以降がSimpleXMLElementオブジェクトのままになるので、1階層だけのものすごく単純なXMLなら配列へのキャストを使うのもあり。
例
var_dump((array)simplexml_load_string($xml));
結果
array(4) { ["abc"]=> string(14) "abcdefghijklmn" ["テスト1"]=> string(12) "てすてす" ["テスト2"]=> array(2) { [0]=> object(SimpleXMLElement)#5 (2) { ["テスト21"]=> string(6) "ふが" ["テスト22"]=> string(6) "ほげ" } [1]=> object(SimpleXMLElement)#6 (2) { ["テスト21"]=> string(6) "ふが" ["テスト22"]=> string(6) "ほげ" } } ["テスト3"]=> string(9) "123456789" }
コメント