PHPの便利な小技 PHPで使える便利な小技などのご紹介

XMLファイルをPHPで扱いやすい変数にする

2014年3月7日
この記事は掲載から1990日経過しています。
情報が古い可能性が有りますのでご了承下さい

XMLファイルをPHPで開いたけど、どうやって配列に格納すればいい?

XML形式のファイルからデータを取り出してPHPで扱いたいときに、file_get_contentsしてもその後どうすれば・・・といったケースです。

サンプル

PHPには simplexml_load_string という便利な関数が有ります。この関数はXMLファイルをオブジェクトとして返してくれるので、それを変数に格納していきます。

[php]
$string = file_get_contents(‘xml.xml’); //ファイルを得る
$obj = simplexml_load_string($string); //オブジェクトに変換
[/php]

実行結果

[php]
object(SimpleXMLElement)#1 (8) {
["userFname"]=>
string(6) "太朗"
["userLname"]=>
string(6) "山田"
…….
[/php]

このままでも良いのですが、扱い易い変数にするため、以下のようなユーザー定義関数を通します。

[php]
function xml_row($obj) {
$arr = array();
if (is_object($obj)) {
$obj = get_object_vars($obj);
} else {
$obj = $obj;
}
foreach ($obj as $key => $val) {
if (is_object($obj[$key])) {
$arr[$key] = xml_row($val);
} else if (is_array($val)) {
foreach($val as $k => $v) {
if (is_object($v) || is_array($v)) {
$arr[$key][$k] = xml_row($v);
} else {
$arr[$key][$k] = $v;
}
}
} else {
$arr[$key] = $val;
}
}
return $arr;
}
[/php]

全体のソースコード

[php]
function xml_row($obj) {
$arr = array();
if (is_object($obj)) {
$obj = get_object_vars($obj);
} else {
$obj = $obj;
}
foreach ($obj as $key => $val) {
if (is_object($obj[$key])) {
$arr[$key] = xml_row($val);
} else if (is_array($val)) {
foreach($val as $k => $v) {
if (is_object($v) || is_array($v)) {
$arr[$key][$k] = xml_row($v);
} else {
$arr[$key][$k] = $v;
}
}
} else {
$arr[$key] = $val;
}
}
return $arr;
}

$string = file_get_contents(‘xml.xml’); //ファイルを得る
$obj = simplexml_load_string($string); //オブジェクトに変換
$obj = xml_row($obj); //配列にする

var_dump($obj);
?>
[/php]

実行結果はサンプルを参照して下さい。 このように配列で戻ってくるので、後はご自由に。

名前空間が定義されている場合

[php]
$string = preg_replace(‘/:/’,’_’,file_get_contents(‘xml2.xml’));
$obj = simplexml_load_string($string);
$obj = xml_row($obj);
[/php]

要は邪魔な文字を先にアンダーバーなどに変換してしまえばいいのです。

 
  • このエントリーをはてなブックマークに追加
  • LINEで送る

PAGE TOP