【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"
}