XMLデータを多次元配列にキャストする関数
…というのを作ったのでメモ。
- 呼び出し元の処理例(場合によってはこのへんから関数に書き起こしても良い)
// まずはファイルからテキスト状態で取得
$text_data = file_get_contents(/* XMLファイルのパス */);
// ファイルが有効であれば以下処理
if ($text_data !== false)
{
// ※特殊文字を無視する処理とか入れるならこのへんでやっちまう
// テキストの状態からXML形式に変換
$simplexml = simplexml_load_string($text_data, "SimpleXMLElement", LIBXML_NOCDATA);
// XML形式として有効であれば配列にキャスト
if ($simplexml !== false)
{
$data_list = $this->xmltoarray($simplexml);
}
}
- キャストする関数(再帰的に呼び出します)
/**
* XMLデータを配列にキャスト
*/
private function xmltoarray($xml)
{
// 配列にキャスト
$array_data = (array)$xml;
// 子要素を再帰的に確認
foreach ($array_data as $key => $value)
{
if (!is_string($value))
{
// 文字列でない場合はさらに加工を行う
if (empty($value))
{
// 空の場合はNULLに置換
$array_data[$key] = null;
}
else
{
// さらに配列にキャスト
$array_data[$key] = $this->xmltoarray($value);
}
}
}
return $array_data;
}
- 例外とかそんなに考慮してない版なので状況に合わせて手を加えるがよい
- 参考:simplexml_load_stringについて