
こんにちは
PHPの勉強を始めたばかりです。
あまり関数もたくさん知りませんが、今のところ覚えたもので、外部ファイル(TXTファイル)から文字列を引っ張り出して、スケジュール表を生成するPHPを作りたいと考えています。
カンマで区切られた文字列を格納したdata.txtというファイルがあります。
内容は
開催月,開催日,時間帯,定員,応募締切月,応募締切日
で、データとしては
6,10,AM,12,5,30
という感じで格納されています。
以下まで作ってみました。
<?php
//data.txtの読み込み
$rData = fopen('data.txt','r');//data.txtを読み込み専用で開き、変数rDataで扱えるようにする
$i = 0;
while(!feof($rData)){//eof(ファイルの終端)でない限り続ける繰り返し処理
$DataLine = fgets($rData);//1行を取り出し、変数DataLineに格納する
$DataLine.$i = explode(",",$DataLine);//DataLineに格納した文字列をカンマで分割してDataLine0やDataLine1などの配列に格納
$i ++;
}
fclose($rData);//開いていたファイルを閉じる
?>
<html>
<head>
<title></title>
</head>
<body>
<?php
echo $DataLine0[0];
?>
</body>
</html>
data.txtの1行目には、
6,10,AM,12,5,30
という文字列が入っています。
ですので、自分としてはこの処理で1行目のはじめの文字である「6」が表示されると思い込んでいたのですが、できませんでした。
画面には何も表示されません。特にエラーも表示されませんでした。
この処理の方法は何か間違っているのでしょうか。
お分かりになる方、いらっしゃいましたら、お力添えいただければ幸いです。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
こんにちは。
まずは修正版のコードを記述します。
$rData = fopen('data.txt','r');//data.txtを読み込み専用で開き、変数rDataで扱えるようにする
$i = 0;
while(!feof($rData)){//eof(ファイルの終端)でない限り続ける繰り返し処理
$DataLine = fgets($rData);//1行を取り出し、変数DataLineに格納する
$DataPars[$i] = explode(",", $DataLine);
$i++;
}
それから書き出しのところ。
<?php
echo $DataPars[0][1];
?>
簡単に説明しますが、 $DataLine.$iのコードの意味はくっつけて表示という使い方はしますが、変数名として合体させる力はありません。
$DataLine.$i = explode(",",$DataLine); //NG
ですので、配列として、
$DataPars[$i] = explode(",", $DataLine);
としてあげることで、配列名と番号のセットされたものに、explodeで作られた配列が入ります。
配列の中に、さらに配列を入れてあげます。
これを1回のセットとしてループしてあげれば、
$DataPars[0] = 1行目の配列
$DataPars[1] = 2行目の配列
というように続きます。
そして、$DataPars[0]この配列の中にある配列を呼び出すには、
$DataPars[0][0] = 1行目の配列の0番目のカラムというようにしてあげましょう。
ご回答ありがとうございます。
教えていただいた方法でできました!
すごい!
配列の中に、配列が作れるんですね!
まだまだ勉強不足です。
でも、教えていただいたことで、また少し壁を越えることができました。
ありがとうございました!!!
No.1
- 回答日時:
> $DataLine.$i = explode(",",$DataLine);//DataLineに格納した文字列をカンマで分割してDataLine0やDataLine1などの配列に格納
ここの考え方が間違っています。
この書き方だとexplode の結果は $i という変数に格納されます。
決して、 Dataline に $iの内容(まあexplodeでぶっ壊されているのは置いといて)
を連結した名前の新しい変数(DataLine1とか)に代入されるわけではありません。
可変変数というものでお望みのことをできなくもありませんが、
素直に配列を使うことをオススメします。
早速のご回答ありがとうございます。
教えていただいたとおり、「$DataLine.$i」という表現を「$DataLine2」に変更して「echo $DataLine2[0]」とすることで、最終行の先頭データを表示することができました。
となれば、この方法では、たとえばdata.txtにレコードが10件入っていたとしても、各レコードを別々の変数に入れておくことは難しいでしょうか。
別々に格納しておくことができれば、後々、HTML側への出力として
<?php
echo $DataLine0[0].'月'.$DataLine0[1].'日'.$DataLine0[2].…;
echo $DataLine1[0].'月'.$DataLine1[1].'日'.$DataLine1[2].…;
echo $DataLine2[0].'月'.$DataLine2[1].'日'.$DataLine2[2].…;
・
・
?>
といったようなことが可能になるかな?と思い、自分なりに作ってみたのがはじめに記載したものでした。
もう少し、試行錯誤してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セッション関数を使わずにファ...
-
PHP8でWarning:Undefined varia...
-
phpの問い合わせフォームを作っ...
-
composerをインストールしたい...
-
PHPで訪問回数を表示するカウン...
-
PHPのエラーの解消法について教...
-
c言語 文字 - '1'+26
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
phpのheader("Location:#pos")...
-
PHPからCSVをアップロード後、m...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
String だと「 ByRef引数の型が...
-
$_SESSIONに二次元配列を使える...
-
配列をループでたくさん宣言し...
-
ネストが深い時のforeachはどう...
-
配列を回すとき、最後の要素だ...
-
file_existsでファイル名の部分...
-
PHPにてクラスを配列にすること...
-
postgresql関数をつかったレコ...
-
foreachのなかで次のキーを参照...
-
【Smarty】foreach関数やsectio...
-
チェックボックス複数選択 mys...
-
漢字のソートについて
-
Smartyについて
-
PHP掲示板で新着順に表示させた...
-
PHP 多次元配列変数のデータ受...
-
チェックボックスが複数選択で...
-
PHPのカッコ[ ]の使い方について
-
sortableで並べ替えてDBに保...
-
SQL文の実行結果を変数で受けて...
-
【PHP】配列内のある値以上をカ...
おすすめ情報