- ベストアンサー
PHPの配列をjavascriptへ渡したい
PHPの配列をjavascriptの配列に渡したいのですがやり方がわかりません。 変数の渡し方ならわかるのですが配列はどう渡せばいいのでしょうか? for文を使って渡せばいいと思うんですがどうやればいいか分かりません。 <?php $filedata=file("data.txt");//javascriptに渡したい配列 ?> <script language="javascript"> var a=new Array();//PHPの配列をこの配列に入れたい </script> 何方か教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
2の補足を見ると、ファイルには配列が入ってるんじゃなくて、ファイルの各行を配列にしたいということみたいですね。 データを引用符で囲んで、カンマで区切ります。データの中にシングルクォートが含まれないと仮定して、 <script language="javascript"> var a={'<?php print implode("','",file("data.txt",FILE_IGNORE_NEW_LINES)); ?>'}; ..... ですが、ファイルの出所によっては仮定が崩れ脆弱性になるので、ちゃんとデータ中のシングルクォートをエスケープする処理をしないといけませんね。
その他の回答 (3)
- yuu_x
- ベストアンサー率52% (106/202)
PHP 5 >= 5.2.0 ( json extension ) var a = <?php echo json_encode($a,JSON_HEX_TAG|JSON_HEX_AMP); ?>; #3 {} → [] <script language="javascript"> → <script language="javascript" type="text/javascript"> ================================================================== PHP と J(ava)Script では処理系が全く違います。その辺は大丈夫ですか? for(i=0;i<=10;i++){ a[i]=<?php print $filedata[$i]; ?>; // 0 行目が直に印字される <?php $i++; ?> // $i = 1 に遷移 // php の処理終了 } PHP 終了後 下のような J(ava)Script と思われる文字列が印字される。 (ファイルの一行目の文字列を aaa と仮定する) for(i=0;i<=10;i++){ a[i]=aaa; } ブラウジング後 aaa という変数は恐らく宣言されていないので、undefined が 11 個入った配列 a が作成される。
お礼
yuu_xさん回答ありがとうございます。 >PHP と J(ava)Script では処理系が全く違います。その辺は大丈夫ですか? PHPはサーバー側での処理、javascriptはブラウザ側での処理をしている、ということですよね? >ブラウジング後 aaaという変数は恐らく宣言されていないので・・・ ありがとうございます。おかげで何故思うように動いてくれないのかが分りました。
- yambejp
- ベストアンサー率51% (3827/7415)
>何かが間違っているんじゃないかと思ったのですが data.txtの戻り値次第ですね。 ちゃんとjavascriptの配列っぽくかかれてなければ当然文法エラーですね
補足
ご回答ありがとうございます。 ありがとうございます。 おかげでちゃんと表示されるようになりました。 ですが、配列の0個目しか読み込んでくれません。 以下のソースなのですが、 <?php $filedata=file("sevedata1/4.txt"); $i=0; ?> <script language="javascript"> var a=new Array(); for(i=0;i<=10;i++){ a[i]=<?php print $filedata[$i]; ?>; <?php $i++; ?> alert(a[i]); } </script> たぶん3行目の$iと11行目の$iが同一視されていないんだと思いますがどう直したらいいのかわかりません。 引き続き申し訳ないのですが宜しくお願いします。
- yambejp
- ベストアンサー率51% (3827/7415)
<script language="javascript"> var a=new Array();//PHPの配列をこの配列に入れたい a=<?php file("data.txt"); ?> </script> 的な処理じゃないですか?
補足
yambejpさんご回答有り難う御座います。 はい、そんな感じの処理をしたいんですがjavascriptの配列にいれた後にalertウィンドウでjavascriptの変数aを表示しようとしたところ何も反応が無いのです。 何かが間違っているんじゃないかと思ったのですがどうなのでしょうか?良ければ教えてください。
お礼
notnotさんご回答ありがとうございます。返答が遅くなりすみません。 >var a={'<?php print implode("','",file("data.txt",FILE_IGNORE_NEW_LINES)); ?>'}; ↑この文を記述したところエラーはでないのですがjavascriptのalertウィンドウでaを表示しようとしたところ何も反応がありませんでした。
補足
失礼しました。 こちらの構文ミスで直したらちゃんと動くようになりました。 ありがとうございます。