読者です 読者をやめる 読者になる 読者になる

アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

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;
}