• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:flashで配列内の検索について)

flashで配列内の検索について

このQ&Aのポイント
  • PHPからJSONで受けたデータの一部を配列に入れて、特定の値があるかを確かめたいがうまくいかない。
  • 配列に入れることや文字で帰ってくるデータの検索はできるが、結果が日本語や英語では検索できない。
  • AS3でJSONをデコードしていますが、検索がうまくいきません。誰かご教授いただける方はいますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

text1 が配列変数であるにも関わらず、添字を忘れているからではないでしょうか。  trace( text1[ 0 ].indexOf( "講談社" , 0 ) ); に、変更してみてください。 例えば、 (↓ 各行頭に全角のスペースが入っています。コピーする際はご注意ください) //***  var test:Array = [ "講談社" ];  trace( test );  trace( test.indexOf( "社" , 0 ) ); //*** trace 文では確かに”講談社”と出力されますが、”社”を検索すると -1 (見つからない)と出ます。 上記の test は要素が1つしかありませんが、1つしかなくてもれっきとした配列変数です。 ですから、要素の番号を指定して //***  var test:Array = [ "講談社" ];  trace( test[ 0 ] );  trace( test[ 0 ].indexOf( "社" , 0 ) ); //*** ↑ このようにすると、”社”の位置である 2 が出力されます。 要素が1つしかないと分かりにくいのですが、配列変数の添字を省略した場合は配列変数の中身を全てまとめた形で扱われています。 //***  var test:Array = [ "講談社" , "集英社" , "小学館" ];  for( var i:int = 0 ; i < test.length ; i++ )  {   trace( test );   trace( test.indexOf( "社" , 0 ) );  } //*** ↑ ループなので「講談社,集英社,小学館」と3回表示され、検索の結果はいずれも -1 です。 この場合も添字を指定して //***  var test:Array = [ "講談社" , "集英社" , "小学館" ];  for( var i:int = 0 ; i < test.length ; i++ )  {   trace( test[ i ] );   trace( test[ i ].indexOf( "社" , 0 ) );  } //*** ・・・とすると、要素ごとの値が個別に出力され、検索も正常に行われます。 - - - - - ところで、読み込んだデータを格納する text1 が、jsonLoaderComplete 関数のローカル変数になっているようですが。 ローカル変数は関数が終了すると消えてしまうため、関数の外では参照できなくなります。 関数の外で定義しておくと、そのタイムラインが存在している間は変数も存在しているので、関数の外でも参照できます。

aomegane13
質問者

お礼

提示された通りにしたら無事解決しました! ”講談社”自体が配列変数とは思いもしなかったので、本当に助かりました。 text1のローカル変数についても助言ありがとうございました。 まだまだ見よう見まねなのでこうしてご指摘頂けると大変勉強になります。 ご丁寧にありがとうございました!!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

最初が JavaScript や PHP の話で さらに配列が出てきたりと,さっぱりご質問自体がわかりません。 (質問自体には PHP も 配列 も直接は関係ないのでは???) さらに > trace(text.indexOf("¥u8b1b¥u8ac7¥u793e",0)); > のように書いたり、そのまま単語で指定してもダメでした。 と書かれましても 何がどうダメだったのかがわかりません。 ---↓コピペしてみてください↓------------------- var text:String = "\u8b1b\u8ac7\u793e\uff92\uff7c"; trace(text.indexOf("\u8ac7",0)); ------------------------------------------- ちゃんと 「1」 と出ますよ。 ちなみに 「\u8b1b\u8ac7\u793e\uff92\uff7c」 は 「講談社メシ」 という文字列のようですね。 「講談社メシ」 から 「談」 の インデックス位置 を表示させるのですから 2文字目 で 「1」 です。 > "¥u8b1b¥u8ac7¥u793e の部分の 半角 と 全角 を間違えているだけという問題ではないでしょうか? ご質問が理解しきれていないので 何か大きな誤解があるかもしれません。

aomegane13
質問者

補足

説明がわかりにくく失礼いたしました…! function jsonLoaderComplete(event:Event) { //データを格納 var jsonData = URLLoader(event.currentTarget).data; //JSONデータをデコード var obj:Object = JSON.decode(jsonData); //出力 var text1:Array = new Array(); for (var i in obj) { //データの一部を配列へ text1.push(obj[i].text); } //配列に単語があるか検索 trace(text1.indexOf("講談社",0)); } ソースの一部になります。 trace(text1); だと、出力には「講談社」とあるのですが、検索すると -1 が返ってきてしまいます。 半角と全角は打ち間違いでした、すみません。 もし何かミス等お分かりでしたらご指摘願います。 よろしくお願いします…!

すると、全ての回答が全文表示されます。

関連するQ&A