- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでfile()を使った際の配列の要素について)
PHPのfile()を使った配列の要素の取得方法と、ファイルサイズについて
このQ&Aのポイント
- PHPのfile()関数を使ってテキストファイルから配列にデータを取り込む際、特定の要素を探す方法について説明します。また、ファイルサイズが大きい場合に配列にすることの負荷についても考察します。
- file()関数で取り込まれるデータの各要素には、不可視の特殊文字や改行コードが含まれている可能性があります。配列内の要素を検索する際には、文字列の前後に余分な文字が含まれていないか確認し、必要に応じてtrim()関数を使って整形しましょう。
- ファイルのサイズが大きい場合、file()を使って一度に配列に取り込むことは負荷がかかる可能性があります。代わりにfgets()関数を使って1行ずつ取り出し、比較する方法も考慮してください。ファイルサイズが100行以上や1万文字以上など、コンピュータのメモリに負荷がかかると感じる容量以上の場合は、特に配慮する必要があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
そのテキストファイルをWindowsで作ったなら、改行はCRLF(\r\n)の2文字で表されています。プログラム中で\nと書くと自動的に\r\nで表示するのでわかりにくいとは思いますが。 CR(\r)で1文字、LF(\n)で1文字使うので、trimしたら消える謎の2文字の理由が説明できると思います。 もしそうなら、$word = "AAA";ではなく、$word = "AAA\r\n";とするとarray_keysでお目当てのものが見つかるでしょう。 そのマシンであなたが使えるメモリーの容量、同時に実行されるプログラムの数、プログラム中でfileで取得するファイルの数にもよるのではないでしょうか。 メモリーの容量が限られていて、同時実行数、fileで読み込むファイルの数ともに多いなら、数キロバイト程度の小さなファイルでもfopenでファイルを開いてfreadや長さを指定したfgetsで決まった量だけ読み込んで処理するようにしたほうがよいと思います。逆に、メモリーがたくさんあって、同時にプログラムが実行されることもなく、ファイルも数個しか無いなら数百メガバイトのファイルでもfileで開けば良いと思います。 メモリーバカ食いな方がプログラミングは楽で、スピードが出ると思うので、まずはメモリーバカ食いな実装で最初作っておいて、それだとメモリーの制限で止められるようになったり、スラッシングが起きるようになったりしてきたら、節約したプログラムに切り替えると良いでしょう。でも、データを入れるときには構造化しておくと思うので、普通はわざわざテキストに改行してデータを入れておくような実装にするよりもRDBMSなどを検討しませんか?
お礼
ありがとうございます。 trimで一応解決はしたものの、謎が残りもやもやしていた部分が解消致しました。 メモリのお話もとても判りやすかったです。 頻繁な呼び出しはしないと想定していますので、fileのままでとりあえず進めてみようと思います。 RDBMSとは、MySQLやSQLiteなどのことですよね。 確か無料で使用できるのはSQLiteでしたでしょうか・・・(うろ覚えなのですけど) データベースが使える言語はPHPが初めてで、まだ覚え始めのため関数や機能を把握しきれていない状態です。 Accessでプロジェクトを作るのと同じような感覚で使えるのでしょうか? テーブルは何らかのファイルが生成されて保存され、クエリはメモリ上で動くイメージなのかなと想像していますが、まだ未知の領域なので追々勉強して行こうと思います。 とても丁寧なアドバイスを頂き、本当にありがとうございました。