PHPマニュアル/PEARマニュアル | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot

データがどのように返されるか | JavaScript入門&応用&リファレンスなら「JavaScriptist」

  

データがどのように返されるか

データがどのように返されるか – ファイルからのデータの取得

説明

Contact_Vcard_Parse は、 ファイルあるいはテキストブロックから vCard データを読み込み、 それを入れ子状の配列に変換します。以前は配列の内容を事細かに説明していたのですが、 それよりは配列の概要をお見せしたほうがわかりやすいですよね。


$parse_result = array (
    [int_cardnumber] => array (
        [string_datatype] => array (
            ["param"] => array (
                [string_paramname] => array (
                    [int_repetitionnumber] => string_paramtext
                )
            )
            ["value"] => array (
                [int_partnumber] => array (
                    [int_repetitionnumber] => string_valuetext
                )
            )
        )
    )
)

例として、私の友人である Bolivar Shagnasty の vCard を見てみましょう。


BEGIN:VCARD
VERSION:3.0
N:Shagnasty;Bolivar;Odysseus;Mr.;III,B.S.
FN:Bolivar Shagnasty
ADR;TYPE=HOME,WORK:;;123 Main,Apartment 101;Beverly Hills;CA;90210
EMAIL;TYPE=HOME;TYPE=WORK:boshag@example.com
EMAIL;TYPE=PREF:boshag@ciaweb.net
END:VCARD

これは非常にシンプルな vCard です。友人である Bolivar の名前、ひとつの住所 (Bolivar は在宅勤務のようです)、 ふたつの email アドレス (ひとつは仕事用と家庭用の共用、そしてもうひとつは "お気に入りの" アドレス) が含まれます。このシンプルな vCard をパースした結果は、このようになります。


(
    [0] => Array
        (
            [VERSION] => Array
                (
                    [0] => Array
                        (
                            [param] => Array
                                (
                                )

                            [value] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => 3.0
                                        )

                                )

                        )

                )

            [N] => Array
                (
                    [0] => Array
                        (
                            [param] => Array
                                (
                                )

                            [value] => Array
                                (
                                    [0] => Array // family
                                        (
                                            [0] => Shagnasty
                                        )

                                    [1] => Array // first
                                        (
                                            [0] => Bolivar
                                        )

                                    [2] => Array // additional or middle
                                        (
                                            [0] => Odysseus
                                        )

                                    [3] => Array // honorifix prefix
                                        (
                                            [0] => Mr.
                                        )

                                    [4] => Array // honorifix suffix
                                        (
                                            [0] => III
                                            [1] => B.S.
                                        )

                                )

                        )

                )

            [FN] => Array
                (
                    [0] => Array
                        (
                            [param] => Array
                                (
                                )

                            [value] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => Bolivar Shagnasty
                                        )

                                )

                        )

                )

            [ADR] => Array
                (
                    [0] => Array
                        (
                            [param] => Array
                                (
                                    [TYPE] => Array
                                        (
                                            [0] => HOME
                                            [1] => WORK
                                        )

                                )

                            [value] => Array
                                (
                                    [0] => Array // p.o. box
                                        (
                                            [0] => 
                                        )

                                    [1] => Array // extended
                                        (
                                            [0] => 
                                        )

                                    [2] => Array // street
                                        (
                                            [0] => 123 Main
                                            [1] => Apartment 101
                                        )

                                    [3] => Array // locality or city
                                        (
                                            [0] => Beverly Hills
                                        )

                                    [4] => Array // region, state, or province
                                        (
                                            [0] => CA
                                        )

                                    [5] => Array // postal code
                                        (
                                            [0] => 90210
                                        )

                                    [6] => Array // country
                                        (
                                            [0] => 
                                        )

                                )

                        )

                )

            [EMAIL] => Array
                (
                    [0] => Array
                        (
                            [param] => Array
                                (
                                    [TYPE] => Array
                                        (
                                            [0] => HOME
                                            [1] => WORK
                                        )

                                )

                            [value] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => boshag@example.com
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [param] => Array
                                (
                                    [TYPE] => Array
                                        (
                                            [0] => PREF
                                        )

                                )

                            [value] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => boshag@ciaweb.net
                                        )

                                )

                        )

                )

        )

)

なんてこった! めちゃくちゃで見苦しい限りです。 でも、この中には vCard の情報がすべて含まれており、 好きなように料理することができます。 すべての要素やコンポーネントが (個別に) 分かれており、 vCard の構造も知ることができます。

ええ、知っていますとも。ちょっとこの配列は階層が深すぎるし、 見栄えもよくないし、非効率的だっていうことを。 vCard フォーマットの問題 (あるいは性質?) は、 vCard の要素がそれぞれ複数の値をとりうるということです。 これにより vCard フォーマットは非常に柔軟なものになっていますが、 きれいにパースして解釈することが少々難しくなります。 私が考える範囲でもっとも簡単な方法は、入れ子状の配列を使用することでした。 オブジェクト指向のアプローチのほうがよりよいのでしょうが、 だとしても結局は入れ子状のオブジェクトや配列を vCard オブジェクト内に保持しないと vCard データ要素の複数の値を表せません。

忘却曲線を使ってこの知識を確実に記憶に残す

フォーラムで「データがどのように返されるか」について話す
各種マニュアル: PHPマニュアル | PEARマニュアル | Smarty(英語)マニュアル | PHP-GTKマニュアル | データがどのように返されるか」をGoogle検索
copyright © 1997-2024 PHP ドキュメント作成グループ(ライセンス). provided by php spot. マニュアル: