人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPからActionScript3.0へ配列になった値の受け渡しについて質問があります。DBから抽出された配列の値をActionScript側で読み込むための「名前=値」のペアの文字列を作成する方法、「名前=値&&名前=値&...」の渡し方に親子関係(Array [0]=>Array([id]=>0,[name]=>A,[type]=>AB,...)[1]=>Array([id]=>2,[name]=>B,[type]=>B,...))のような関係)を維持して値を受け渡す方法は可能でしょうか?左記のような、DBから抽出された配列データ、親と入れ子が繰り返されたデータを受け渡す方法をご存知の方…基本的な質問で大変、恐縮ですがご教授いただけると助かります。


●質問者: DrArabes
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● うぃんど
●100ポイント ベストアンサー

受け取り手もphpであればserializeというもので変換して送るという手が使えて簡単

http://php.net/manual/ja/language.oop5.serialization.php

しかしながら受け取り手はActionScriptなので、

一般的に使われているJSONやXMLなどのデータ形式で受け渡しすることになるでしょう

php側でJSON形式にする関数json-encode

http://www.php.net/manual/ja/function.json-encode.php

urlencodeもお忘れなく

ActionScript側でJSON形式から展開するライブラリas3corelib

http://d.hatena.ne.jp/sukesam/20071019/1192723350

http://code.google.com/p/as3corelib/

以上、参考まで


うぃんどさんのコメント
回答No.2でXMLの話題も出てますが、 なぜかActionScript側のXMLに関する説明が無いので、蛇足的に追記 http://itpro.nikkeibp.co.jp/article/COLUMN/20061130/254416/ http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/XML.html

DrArabesさんのコメント
早速の返信、ありがとうございます。下記のURLにXMLに書き出すスクリプトを記述しましたが、毎度毎度リクエストのあるたびにフォルダーにXMLを書き出すのは、的確ではないと思いました。PHPからActionScriptへダイレクトにXMLを返すには、どのようにしたら良いでしょうか?変数に一まとめにするのでしょうか?? お手数ですが、ご教授いただけると助かります。よろしくお願いします。 http://www.kinsekitei.com/prototype/sample.html

うぃんどさんのコメント
あらっ? 前回の失敗スクリプト消してしまったのね・・・ XMLの塊を1つの変数に入れてしまって、 それを echo 出力してやるって方法なら、 ファイル作成せずに、直接渡せる JSONを選択した理由はデータ量が少ないことと、 phpが(のバージョンによるけど)ネイティブ対応しているので、 PEARよりも処理速度面で優位なこと XMLの利点はxpathが使えること それぞれ用途によるので、どれが一番ってのは答えにくいんですよね それを冒頭で言い切っている人がいるので、 この先は、そちらの人に聞いてもらったほうがいいように思います

DrArabesさんのコメント
なろほど。。XMLのほうがJSONより少しだけ知ってるので、そちらで今トライしています。本当に丁寧にありがとうございます!!

DrArabesさんのコメント
すいません。。もう少しだけお答えいただけたらですが… PHP側のXMLを一塊にする方法は「$all = $dom->dump_mem();」でよかったのでしょうか?

うぃんどさんのコメント
10/23 5:02のコメントの意味するものが判らなかったのですが、 新質問(http://q.hatena.ne.jp/1319452438)とあわせると、 もしかしたら文字化けですか? 「urlencodeもお忘れなく」はXMLでも同じです 一塊にしたものをURLエンコーディングしてから送り返さないことには、 データが途切れたり、相手側で文字化けしたり・・・ これだけではないかもしれませんが、とりあえず・・・

DrArabesさんのコメント
文字化けてはいないのですが…TypeError: Error #1009: nullがはきだされ…PHP側でurlencode($dom);echo ($dom);としたのですが…パブリシュしても同様のエラーがはかれ、traceできなくて困っている状況です。

DrArabesさんのコメント
追記)PHP側でXMLをURLエンコードしましたが…URLリクエストはNULLでした。なぜなのでしょう?POSTした戻り値がNull… PHP側では変数を一塊にしたのですが解決できませんでした。

2 ● romer
●50ポイント

XMLあたりが一番いいのではないでしょうか。

PHP側はPEARのXML_Serializerあたりを使えば簡単にオブジェクトや配列からXML化する事ができます。

http://pear.php.net/package/XML_Serializer/

またJSONという形式もありだと思います。

PHP側の実装はPHP5以降ならjson_encode使うだけなのでこちらも楽です。

ただFlash側でコンパイル時にライブラリへのリンクが必要なようです。

http://d.hatena.ne.jp/sukesam/20071019/1192723350


romerさんのコメント
XMLを第一に押したのは、AS側で追加する必要が無いためです。 個人的にはJSONの方が扱いやすいとは思います。 あとXML化する方法ですが、書かかれているdump_memは、 DOMを構築した後に書き出す物なので今回考えられている用途にはあわないと思います。 紹介したXML_Serializerであれば $serializer = &new XML_Serializer(); $serializer->serialize($data); $serializer->getSerializedData() この3行ですみます。 serializeの戻り値はboolで、XML化できるかできないかの判断ができます。 getSerializedDataを実行し取得した値がXMLしたデータです。 $dataにはXML化したいデータを入れてください。 またSerializerのオブジェクトを生成する時に様々なオプションが設定できます。 オプションに設定できるキーは以下を参照してください。 http://pear.php.net/manual/en/package.xml.xml-serializer.constants.php オプションはsetOptionメソッドを使って途中で変更する事もできます。 例 $opt = array ( XML_SERIALIZER_OPTION_INDENT => "\t", XML_SERIALIZER_OPTION_LINEBREAKS => "\n" ); $serializer = &new XML_Serializer($opt); この例はインデント時にタブを指定し、改行コードにLFを指定している事になります。 視認しやすくなる設定です。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ