2006/07/26

受け取ったXMLをどうするか。

simplexml_load_stringで、XML構造を持つstringを食わせるとよろしく、SimpleXMLElementクラスのオブジェクトに変更してくれるわけだが、XML構造が二階層、三階層と深くなってくるとこのSimpleXMLElementも同様に深くなっていく。

PHP4なときは、XML_Unserializerなんかを使って、連想配列にしてアクセスを可能としていたわけだけども、PHP5では、どうしようかと悩むところだ。SimpleXMLElementは、xpathで指定もできるので、それで全部片が付きそうなので、それでいいような気もする。しかし、連想配列でどうしても欲しいんだ!っていう人もいるかもしれないので、連想配列で取得できるようにしてみた。Services_YouTubeね。

PHPのマニュアルを見ていたら、simple_load_fileのところの下のコメント欄に、object2arrayってのがあって、それをほぼそのまま使用してみた。

class ......
    public static function forArray($object)
    {
        $return = array();

        if(is_array($object)) {
            foreach($object as $key => $value) {
                $return[$key] = self::forArray($value);
            }
        } else {
            $vars = get_object_vars($object);
            if(is_array($vars)) {
                foreach($vars as $key => $value) {
                    $return[$key] = ($key && !$value) ? null : self::forArray($value);
                }
            } else {
                return $object;
            }
        }
        return $return;
    }
.....
}

てな感じか。なんか、インスタンスメソッドじゃないよなー。なんて思ったので、staticメソッドみしてみた。まぁ、それでも使わなくてもいいけどね。

つーかね。受け取ったXMLって詳細な自作クラスのオブジェクトに突っ込んだ方がいいのかしら。私的には、SimpleXMLELementか連想配列でいいじゃんって思うのだが、その辺、私ではよくわからない。。。非常に悩ましい。

Leave a comment

Bloglines feedburner