• ベストアンサー

PHPの配列をjavascriptへ渡したい

PHPの配列をjavascriptの配列に渡したいのですがやり方がわかりません。 変数の渡し方ならわかるのですが配列はどう渡せばいいのでしょうか? for文を使って渡せばいいと思うんですがどうやればいいか分かりません。 <?php $filedata=file("data.txt");//javascriptに渡したい配列 ?> <script language="javascript"> var a=new Array();//PHPの配列をこの配列に入れたい </script> 何方か教えてください。

  • 00d
  • お礼率50% (5/10)
  • PHP
  • 回答数4
  • ありがとう数3

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.3

2の補足を見ると、ファイルには配列が入ってるんじゃなくて、ファイルの各行を配列にしたいということみたいですね。 データを引用符で囲んで、カンマで区切ります。データの中にシングルクォートが含まれないと仮定して、 <script language="javascript"> var a={'<?php print implode("','",file("data.txt",FILE_IGNORE_NEW_LINES)); ?>'}; ..... ですが、ファイルの出所によっては仮定が崩れ脆弱性になるので、ちゃんとデータ中のシングルクォートをエスケープする処理をしないといけませんね。

00d
質問者

お礼

notnotさんご回答ありがとうございます。返答が遅くなりすみません。 >var a={'<?php print implode("','",file("data.txt",FILE_IGNORE_NEW_LINES)); ?>'}; ↑この文を記述したところエラーはでないのですがjavascriptのalertウィンドウでaを表示しようとしたところ何も反応がありませんでした。

00d
質問者

補足

失礼しました。 こちらの構文ミスで直したらちゃんと動くようになりました。 ありがとうございます。

その他の回答 (3)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.4

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 が作成される。

00d
質問者

お礼

yuu_xさん回答ありがとうございます。 >PHP と J(ava)Script では処理系が全く違います。その辺は大丈夫ですか? PHPはサーバー側での処理、javascriptはブラウザ側での処理をしている、ということですよね? >ブラウジング後 aaaという変数は恐らく宣言されていないので・・・ ありがとうございます。おかげで何故思うように動いてくれないのかが分りました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>何かが間違っているんじゃないかと思ったのですが data.txtの戻り値次第ですね。 ちゃんとjavascriptの配列っぽくかかれてなければ当然文法エラーですね

00d
質問者

補足

ご回答ありがとうございます。 ありがとうございます。 おかげでちゃんと表示されるようになりました。 ですが、配列の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)
回答No.1

<script language="javascript"> var a=new Array();//PHPの配列をこの配列に入れたい a=<?php file("data.txt"); ?> </script> 的な処理じゃないですか?

00d
質問者

補足

yambejpさんご回答有り難う御座います。 はい、そんな感じの処理をしたいんですがjavascriptの配列にいれた後にalertウィンドウでjavascriptの変数aを表示しようとしたところ何も反応が無いのです。 何かが間違っているんじゃないかと思ったのですがどうなのでしょうか?良ければ教えてください。

関連するQ&A

  • PHP配列をJavaScriptに渡したい

    全くの初心者です。 PHPファイルのなかで外部のテキストファイルから読み込んだデータ$listをJavaScriptの配列に変換したいのですが、分かりません。よろしくお願いします。 JavaScriptが外部のデータを読み込めないなら、いったんPHPでオプションメニューに書き込んだあと、これをJSで配列に取り込むことも考えたのですが、これもオプションメニューの各アイテムをどうしたら読み取れるのかが分かりませんのであきらめたしだいです。 <?php $file = fopen("GermJ.txt","r"); $list = file('GermJ.txt'); fclose($file);  $max=count($list); ?> <SCRIPT type="text/javascript"> <!-- var jsArray; // グローバル宣言 function Arraycreate() {  jsArray = new Array($max);  //$max をこうすることは可能ですか?  for (i = 0; i <= $max-1; i++) { jsArray = $list[i];???????? (分かりません) } } // --> </SCRIPT>

    • ベストアンサー
    • PHP
  • javascriptの配列をPHPで読み込みたいのですが・・・

    javascriptの配列を記述してあるファイル info.js があるとします data = new array(); data[0] = new array("data1","data2","data3"); data[1] = new array("data1","data2","data3"); data[2] = new array("data1","data2","data3"); ・ ・ ・ 上記の文で書かれた配列データを、PHP上で読み込み、新着一覧のような形でhtmlで表示したいのですが、方法が分かりません。 分かる方がいらっしゃいましたら教えて下さい。

    • ベストアンサー
    • PHP
  • 連想配列(PHP 対 JavaScript)

    こんにちは。質問をさせてください。 PHPでOracleのデータを取得してそのデータを連想配列に格納するとします。 /------- PHP内でのソース -----------------/ (例) $Count:検索データ数  for($cnt=0;$cnt<$Count;$cnt++){ $data[$cnt] = "取得したデータ";  Fech(次のレコードを取得する); } 上記で取得した連想配列の値をJavaScriptでしようしたいのですが うまくいきません。 JavaScriptではArrayに取得したデータを格納したいのです。 (例) /-- JavaScript内のソース Afor2=new Array("取得data1","取得data2",・・・"最後の取得data"); としてHTMLの何かのイベント時にしようしたいと考えています。 今僕は以下のような動きをしたいです。 /----以下、JavaScriptでの記述-----------------/ var New_Array=new Array(5); for(i=0;i<<?=$Count?>;i++){ document.form.cmb_box.options[i] = new Option(<?=$data[i]?>, i); } のようなことをしたいのですが。 (もちろん上記はだめですが・・・) 質問がわかりにくくて大変もうしわけありませんが、 アドバイス、質問などよろしくお願いいたします。

    • 締切済み
    • PHP
  • JavaScriptで取得した値について

    初めまして、Etizenと言います。 早速質問なのですが、JavaScriptで 例えば、 <SCRIPT LANGUAGE="JavaScript"> <!--  var QS = new Array;  if (location.search.length > 1)  {   var m_Array =    location.search.substr(1).split("&");    for (idx in m_Array)    { QS.push(m_Array[idx].split("="));    }  } //--> </SCRIPT> という、配列でデータを取得した場合にこれを、HTMLの <input type="text" name="STFCD" Value> のValueの中に仕込むことは可能でしょうか? よろしくお願い致します

  • 【AS3.0】外部テキストから配列を読み込む

    fla→PHPに変数・配列のデータを送り、 下記のようなテキストデータを.txtファイルに出力するものを作りました。 var1=1&var2=0&array1=1,2,3&array2=1,2,3,4&array3=1,2,3,4,5 送られた変数・配列はすべて連なっており、&で区切られています。 変数を読み込むには下記で出来るようですが、 参考URL:http://ninotk.oops.jp/weblog/?p=30 private var filePath:String = "topics.txt"; private var tpcLoader:URLLoader; init(); function init(){ tpcLoader = new URLLoader(); tpcLoader.dataFormat = URLLoaderDataFormat.VARIABLES; tpcLoader.addEventListener(Event.COMPLETE,onComplete); tpcLoader.load(new URLRequest(filePath)); } private function onComplete(evt:Event):void{ var src:String = evt.target.data; var vars:URLVariables = new URLVariables(src); contents.topics._date.text = vars.date; contents.topics._txt.text = vars.news; } 配列を読み込む手順がどうしても分かりませんでした... さらに上記のような変数・配列混合での読み込みは可能でしょうか。 もし不可能のようでしたら、変数のみのtxtと配列のみのtxtとで分けての出力も可能です。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • javascript 連想配列

    初めて連想配列で処理を行っております。いろいろグーグル等で調べましたが、どうしてもできないので、ご教授頂けますでしょうか。 phpからjavascriptにデータを渡し、連想配列化する必要がありまして、以下の通りにやってみました。配列化は自動化したく、for文でこのようにしてみました。phpの大部分は少々長いので省きますが、ざっとこんな感じです。 var place = <?PHP echo $place ?>; //東京、大阪、名古屋 var address = <?PHP echo $add ?>; //東京都、大阪府、名古屋市 var Data = new Array();   for(i=0;i<place.length;i++){ Data[i].push({add1:place[i] , add2:address[i]});   } alert(Data[0]); ------------------------------- 上記の方法ですと、placeとaddressには正しく値はphpから渡されるのですが、肝心なDataはなにも出力されません。エラーもなく、まっさらです。 理想系は、以下の方法の通りにしたいと思っております。 下記はフリーウェアの中身を今回の案件に手直ししたものです。 Data = [{  add1: "東京",  add2: "東京都" }, {  add1: "大阪",  add2: "大阪府" }, {  add1: "名古屋",  add2: "名古屋市" }]; この場合と同じ結果が出力されれば完成なのですが・・・ 例えば、Data[0]をalertすると、「object object」と出力されます。 現在は3件で開発を行っておりますが、今後はどんどん増えていくので、自動化させるためにfor文か、for in文を使ったほうがいいのかな と思っているのですが、力及ばず詰まっております。 どうかお助けください。 よろしくお願い致します。

  • PHP javascript の関係に関して

    現在、MySQLよりPHPを用いてデータを取得し、PHPのある変数にデータを格納しています。 その結果を、javascriptの中でデータとして使用したいと考えていますが、そもそもPHPで格納されている変数をjavascriptの中で使用する事は可能なのでしょうか。。。 //例ですが、   $sql = "select aaa from AAA"; if (!mysql_select_db('db', $con)) { echo 'Could not select database'; exit; } mysql_query("set names sjis"); $result = mysql_query($sql,$con); $row = mysql_num_rows($result); $count = 1; for($i=0;$i<$row;$i++) { $array = mysql_fetch_array($result); $tmp_aaa[$count] = $array[0]; $count++; } <script type="text/javascript"> <!-- msgtxt = new Array(); for (i=0; i<3; i++){ msgtxt[i] = new Array(); } $count = 0; for($i=0;$i<$row_naiyou;$i++) { $msgtxt[$count] = $tmp_aaa[$count]; $count++; } というような形です。 javascript自体、php> ?>の中に囲まれていれば問題ないのでしょうか? 初歩的な質問で申し訳ありませんが、教えて下さい。

    • 締切済み
    • PHP
  • PHPとJavascriptの連携

    こんにちは。 PHPとJavascriptの連携について質問があります。 ↓のコードは、 (1)PHPの側で、test.csvというCSVファイルからデータを配列に読み込み、 (2)その配列データをJavascriptに渡し、 (3)カウンター番号の配列データをHTMLのTextに表示させる という流れを意図したものです。 しかし、$question[]配列がJavascriptにうまくわたっていないようで、エラーになります。 発想自体に問題があるのか、表現の仕方がまずいのか、ご指摘いただきたくよろしくお願い申し上げます。 *************************************↓コード <script language="Javascript"> var $question = new Array(); var n = 0; function disp() { document.myform.mytext.value = $question[n]; //Textに$question[n]を表示させる n++; } </script> //------------------------------------------------------------------------ <form name="myform" > <input name="mytext" type="text"><br> <input name="mybutton" type="button" value="click" onclick="disp(this)"> </form> //------------------------------------------------------------------------ <?php $fp = fopen("test.csv", "r"); //CSVファイルを開く $count = 0;           //カウンターを初期化する while(!(feof($fp)))       //ファイルの終端まで読み込む { $buf = fgets($fp, 1024); $buf = chop($buf); //文末にある改行文字を削除する $data = split(",", $buf); // , ごとに区切って配列に格納する $question[$count] = $data[0]; //question[]配列に$data[0]を格納する $answer[$count] = $data[1]; //answer[]配列に$data[1]を格納する $count++; //カウンターを1進める } fclose($fp); ?>

    • ベストアンサー
    • PHP
  • php -> javascript 変数渡し

    tempフォルダにtest.txtファイルが存在すれば、 fileフォルダaaa.txtファイル名をbbb.txtファイルに変更という流れです。 変更ボタンをクリックすると、値を$testdataに渡し、ファイル有無をチェックし、ある場合は変数をjavascriptに渡すしますphpの所は問題ありませんが、 javascript処理の所がどうしてもうまくいきません。変数渡しができません。 ネット上でいろいろ調べてみましたがすべてダメでした。 ぜひ、よろしくお願いいたします。 下記はそのコードです。 ファイル名test.php <? $testdata = $_GET["testdata"]; $filename = "C:\\xampp\\htdocs\\test\\file\\temp\\".$testdata; if(file_exists($filename)){//ある場合、変数をjavascriptに渡す $testdata_script = $testdata; }//ここまでは問題ありません。 ?> <!-- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> --> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>テスト</title> <script type="text/javascript"> <!-- function test(file) {       obj = new ActiveXObject('Scripting.FileSystemObject'); var name = '<?php echo $testdata_script ;?>'; alert(name); strMoveFrom = 'C:\\xampp\\htdocs\\test\\file\\aaa.txt'; strMoveTo = 'C:\\xampp\\htdocs\\test\\file\\bbb.txt'; obj.MoveFile(strMoveFrom ,strMoveTo ); obj= null } //--> </script> ...省略 <form action=test.php method=get accept-charset=UTF-8> <input type=submit value=変更 onclick=test('file')> <input type=hidden name=testdata value="test.txt">

  • Ajax以外で、JavaScriptからPHPへ渡

    Ajax通信以外で、JavaScriptからPHPへ変数(配列)を渡したいのですが、 可能でしょうか? 下記のような状態の時、js変数dataを、Ajax通信を利用せずにPHP変数として取得したいのですが、どうすればよいでしょうか? JavaScript関数の中で、PHPフォームの送信ボタンをクリックさせる(ような)ことは出来ないのでしょうか? <button type="button" onclick="testsubmit();">送信</button> <script> function testsubmit(){  js処理;  var data = ★★; } </script> ■最終的にやりたいこと ・ボタンをクリックしたら、js処理で取得したjs変数(配列)を、Ajax通信を利用せずに、PHP変数として受け取りたい ・それを出来れば1クリックで処理したい

専門家に質問してみよう