![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
全くの初心者です。
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>
No.7ベストアンサー
- 回答日時:
>この問題を扱ってくれているものは、皆無か、
>http://www.comtechware.com/phpSamples/showDetail …
>に見られるような例では、値の引き渡しは行われていません。
なぜならば最初にも書いたとおり、PHPとJavaScriptは
動作する場所すら異なっているので、同じプログラミング言語
といえど「引き渡し」や「連携」させるのは不可能だから
です。
一見「引き渡し」たり「連携」させているように見える
先のサンプルコードでさえPHPから見ればあくまで
JavaScriptの一連のコードを「はき出している」に
すぎないのです。
もうPHPでJavaScriptをはき出す部分まで出来ているので
残るはJavaScriptのエラーだけですよね。JavaScript
でエラーが出ると言うことは「吐き出すコード」が
間違ってるってことです。そこを正しいコードが吐き出せる
ようにPHPのprint文なりecho文などを変更するだけだと
思うんですが、どうも「引き渡し」や「PHPで全て解決」
と思いこみを持たれていて、HTMLのソースを確認する
という簡単かつ重要なステップさえも見落とされている
ようです。
PHPで吐き出された(JavaScriptでエラーが出るという)
コードをきちんと読んでみてはいかがでしょう。
あと読み込むデータが4万行ですよね。もっと少ない
ファイルでテストしてみるとどうなりますか?
>あと読み込むデータが4万行ですよね。もっと少ないファイルでテストしてみるとどうなりますか?
何度もご指導頂いてほんとうに感謝しております。
ファイルを8000行にまで削ってやりますと、IEの実行速度がダウンするから、このスクリプトの実行を中止しますか?と言うメッセージが出て、16000行ファイルでphp->js変換するともう画面が真っ白で、しばらく停止状態でした。
4000行ファイルではおかげさまでスムーズに変換できました。この先どうしたら4万行ファイルから変換ができるようになるのでしょうか?どうか引き続き御教示をお願いいたします。
function getArray()
{
<?php
$file = fopen("GermJ.txt","r");
$phparray = file('GermJ.txt');
fclose($file);
/*
$phparray[0]='aaaaaaa[aaa/aaaaaaaaa';
$phparray[1]='bbbbbbbbb\bbbbbbbbbb';
$phparray[2]='cccccc[bisk'vi: t]ccccccccccccc';
$phparray[3]='ddddddddddddddddddd';
$phparray[4]='eeeeeeeeeeeeeeeeeee';
*/
$max = count($phparray);
for ($i=0; $i<$max; $i++)
{
echo 'jsArray[' . ($i) . ']="' . ereg_replace("\r\n","",addslashes($phparray[$i])) . '";' . "\n";
}
?>
for(i=0;i<jsArray.length;i++)
{
document.writeln(jsArray[i]+"<br>\n");
}
}
No.6
- 回答日時:
エラーの内容もそうだけど、PHPの場合ははき出される
テキスト(HTML)も重要だったり。。。
そこまでくれば後はファイルの中身に合わせて
addslashesなりereg_replaceなりで文字列を
エスケープしてやるだけですよ。
\r\nを消したのは改行コードを消しただけなので、
テキストの中の\nは消えてないはずです。
echo 'datalist[' . ($i+1) . ']="' . ereg_replace("\r\n","",$list[$i]) . '";' . "\n";
ここを
echo 'datalist[' . ($i+1) . ']="' . ereg_replace("\r\n","",addslashes($list[$i])) . '";' . "\n";
こうしたりいろいろ工夫してみてください。
この回答への補足
少し前進しましたが、ヘンです。同じデータを下のようにファイルに書いて読み込み、jsArray生成をしようとすると、
「終了していない文字列型の定数です」
というエラーが出ます。
ところがファイルをやめて、このスクリプト中で$list配列に同じデータをセットすると生成ができました。なぜでしょうか?
function getArray()
{
var jsArray = new Array();
<?php
$file = fopen("abc.txt","r");
$list = file('abc.txt');
fclose($file);
$max = count($list);
/*
$list[0]='aaaaaaaaaaaaaaaaaaaaaaaaaa';
$list[1]='bbbbbbbbbbbbbbbbbbbbbbbbbb';
$list[2]='cccccccccccccccccccccccc';
$list[3]='ddddddddddddddddddddddddddd';
$list[4]='eeeeeeeeeeeeeeeeeeeeeeeee';
*/
for($i=0;$i<count($list);$i++)
{
echo "jsArray[$i] = \"".addslashes($list[$i])."\";";
}
?>
for (aa=0; aa<5; aa++)
{
document.write(jsArray[aa]+"<BR>");
}
} //End of Function
// --></SCRIPT>
ありがとうございました。
行:3293
エラー:終了していない文字列型の定数です。
というJSのエラーが出ました。
何度もご回答ありがとうございました。結局、php→ JS 配列の引き渡し、これは私の力では難しすぎるようです。
何かこれを解説してくれている書籍とか、サイトがありましたらお教えくださると、そちらでもっと勉強してから、ここへ再び参ることができるかもしれません・・・(すでに解説書は3冊読みましたし、レファランスも見たり、サイトのマニュアルなど、可能な限り当たってきましたが)
この問題を扱ってくれているものは、皆無か、
http://www.comtechware.com/phpSamples/showDetail …
に見られるような例では、値の引き渡しは行われていません。
どうかよろしくお願いします。
No.5
- 回答日時:
そーすをそのままコピーされたんですね。
あのソースは見やすくするために全角スペースを入れてあったので
それを削ってやれば問題ないです。
途中ファイルから読み込むときに改行コードが邪魔だったので
ereg_replaceかましてみました。
<?php
$file = fopen("GermJ.txt","r");
$list = file('GermJ.txt');
fclose($file);
$max = count($list);
?>
<HTML>
<HEAD>
<META http-equiv="Content-Style-Type" content="text/css">
<SCRIPT type="text/javascript">
<!--
var datalist;
var imax;
function getArray()
{
aa=-1;
datalist = new Array();
<?php
for($i=0;$i<count($list);$i++)
{
echo 'datalist[' . ($i+1) . ']="' . ereg_replace("\r\n","",$list[$i]) . '";' . "\n";
}
?>
} //End of Function
// --></SCRIPT>
</HEAD>
<BODY bgcolor="#edd596">
<script type="text/javascript">
<!--
aa=getArray();
// -->
</script>
</BODY>
</HTML>
php のParse エラーの代りにこんどはJSの、でたらめな行数(99)を言ってくるランタイムエラー「','」がありません、と出ますが。。もしかするとデータの文字列に問題が?
例えば継ぎのような一行です:
fuchsen /// [口] \n(I)t.激しく怒らせる \n(II)refl. sich ueber etw fuchsen 或事に激しく腹を立てる
こんなデータが4万件あります。でここの\nを消しちゃうということなんですね?
でも、どうしてエラーが?
No.4
- 回答日時:
Parse error: parse error, unexpected '@' in C:\Apache2\htdocs\dic\php_jsEchangeTest.php on line 44
ってことは、php_jsEchangeTest.phpの44行目で
パースエラーを起こしてるって事です。
余分な@があるって事で、そこをダブルクオート(”)
しているようでしたらそれをシングルクオート(’)に
置き換えてみたらいかがでしょう。
読み込む文字列を代入する前にaddslashes()をしておく
ことも忘れずに。
ソースが見れれば良いんですけどねぇ。
ソースの全体です。
<?php
$file = fopen("GermJ.txt","r");
$list = file('GermJ.txt');
fclose($file);
$max = count($list);
for ($i = 0; $i <= $max-1; $i++)
{
$s = $list[$i];
$pp = strpos($s, ' /// ');
if ($pp>0)
{
$stichwort = substr($s,0,$pp+1);
$yakugo = substr($s, $pp + 6);
$dic_hash[$stichwort] = $yakugo;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 7.0.0.0 for Windows">
<META http-equiv="Content-Style-Type" content="text/css">
<META name="IBM:HPB-Input-Mode" content="mode/flm; pagewidth=940; pageheight=1200">
<TITLE></TITLE>
<SCRIPT type="text/javascript">
<!--
var datalist;
var imax;
function getArray()
{
aa=-1;
datalist = new Array();
<?php
for($i=0;$i<count($list);$i++) //*************
{
echo 'datalist[' . ($i+1) . ']=' . $list[$i] . ';';
}
?>
} //End of Function
// --></SCRIPT>
</HEAD>
<BODY bgcolor="#edd596">
<script type="text/javascript">
<!--
aa=getArray();
// -->
</script>
</BODY>
</HTML>
このスクリプトの//**********のところを行数で指し示して:
Parse error: parse error, unexpected '@' in C:\Apache2\htdocs\dic\kdic2.php on line 51
とおこられます。
原因が分かりません。基本的な知識で大変申し訳ありませんが、どうかお教えください。
No.3
- 回答日時:
なんだかJavaScriptとPHPがごっちゃになっていますね。
<SCRIPT type="text/javascript">
<!--
var jsArray; // グローバル宣言
function Arraycreate()
{
jsArray = new Array(
<?
$list = file('GermJ.txt');
for($i = 0 ; $i < count($list) ; $i++){
print "\"" . trim($list[$i]) . "\"";
if($i != (count($list)-1)){
print ",\n";
}
}
?>
);
}
// -->
</SCRIPT>
とりあえず、こんな感じでどうでしょう?
ただし、GermJ.txtの中のテキストに"があると
JavaScriptのエラーになりますので、"が含まれる可能性があるなら必要な処理を
ご自分で考えてみてくださいね。
私のおたずねしている枠組みに沿って御回答していただき大変ありがとうございました。
エラーが出ました。これで配列jsArray に値が代入されたことになるのですか?
No.2
- 回答日時:
スクリプトがよくわからないのですが、
$array = array('data1','data2','data3');
for ($i=0;$i<count($array);$i++;) {
echo 'js_array[' . ($i+1) . '] = ' . $array[$i] . ';';
}
これで
js_array[1] = data1;
js_array[2] = data2;
js_array[3] = data3;
って出ますけど、こんなことじゃなくて?
ご回答ありがとうございました。その内容は、つまり、phpの配列 $list をこのようにjsArrayへと変換できるということですね?
最初に私が書きましたあのスクリプトがいたらないために、おわかりにならない、とのこと。申し訳ありません。
このphp_Js_Exchange.php というファイルをことばで説明いたします。まず最初の所は外にあるテキストファイル(4メガ)をphp配列に読み込みます。次のJS スクリプトの部分で、この配列 $list から値をfor 文でJSの配列 jsArray を生成して代入しようとしています。
この部分に、今教えて頂いた4行のスクリプトを入れてみたのですが、
最初のParseエラーは:) があるべきところに ; がある、という内容でした。
これを
for ($i=0;$i<count($array);$i++) {
echo 'js_array[' . ($i+1) . '] = ' . $array[$i] . ';';
}
としたところ
こんどのParseエラーは
Parse error: parse error, unexpected '@' in C:\Apache2\htdocs\dic\php_jsEchangeTest.php on line 44
でした。
ひどく基本的なことをおたずねして、呆れていらっしゃるとは存じますが、どうぞ、もうすこしくわしくスクリプトを書いて頂けないでしょうか?
No.1
- 回答日時:
よくある事例ですが、JavaScriptとPHPは動作する
「場所」が違います。
JavaScriptはHTMLの一部であり、クライアントサイドで
動作します。
PHPはサーバーサイドのスクリプトで、JavaScriptを含む
HTMLを出力します。
つまり、最終目的となるJavaScriptを思い描いて、
それが出力できるようにPHPを書いてあげればよい
ということです。
これさえ理解できれば難しいことではないはずです。
はい、そこまでは理解できております。それなのに、その先へ行けないのです。初心者の悲しさです。
次のようなことも、さっきからやってみておりますが、値が渡されておりません。データは5万件以上です。
<SCRIPT type="text/javascript">
<!--
var datalist;
var imax;
function getArray()
{
aa=-1;
datalist = new Array();
<?
for ($ii=0; $ii<$max; $ii++)
{ ?>
aa++;
datalist[aa]= <?$list[$ii] ;?>
<?
}
?>
imax = datalist.length;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript 【jquery】EasyUIのSubGridにMySQLのテーブルデータを表示&編集にしたい 5 2022/05/02 13:10
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで画像の渡しが上手く行きま...
-
if(preg_match("/[^0-9]/",$gu_...
-
PHP MySQLに画像を直接保存
-
htmlspecialcharsが機能してい...
-
掲示板を作成しておりアップロ...
-
PHPSpreadsheetによる書き出し...
-
phpでこの記述をもっと簡単に書...
-
ランキングを表示する際の画像...
-
PHPについて。
-
phpのheader("Location:#pos")...
-
PHPからCSVをアップロード後、m...
-
[php初心者]サイトを見てデータ...
-
phpに関わる所での、form actio...
-
ゆゆにゃ。
-
【初心者】XAMPPのapacheの(恐...
-
プログラミング言語で、使える...
-
こちらはただの直列処理ですか?
-
PHPでこのコード自体に意味は無...
-
PHPとHTML+Xamppの掲示板で画像...
-
phpでPEAR::DBを使っているので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
phpとmysqlで「あいまい検索」...
-
PHP5の外部コマンド実行で、バ...
-
「ローマ字 -> ひらがな」へPHP...
-
Mysqlとphpでソートや更新時の...
-
PEAR・MDB2のモジュールロード...
-
HTTPのメッセージボディについ...
-
数学の「組み合わせ」を求める...
-
順位を付ける時のスコアの重複...
-
Zend_Form_Element_Hash
-
日付から順にデータを並び替えたい
-
占いのPHPを作成中ですが・・・
-
しりとり 無限ループ?
-
選択日と終了日を配列で取得したい
-
多次元配列のカウント+1の仕方
-
mysqlにinsertするとエラーがで...
-
$xml要素を階層指定して取得し...
-
サイト名を取得するPHP
-
要素(文字列)から指定値を検索
-
月一覧を取得するには?(20120...
おすすめ情報