5

私はほとんどそこにいると感じています。これは .txt ファイルで、約 60 キロバイトあり、ドイツ語でいっぱいです。すべての単語は新しい行にあります。

私はこのコードでそれを繰り返したい:

<?php

    $file = "GermanWords.txt";
    $f = fopen($file,"r");

    $parts = explode("\n", $f);

    foreach ($parts as &$v) 
    {
        echo $v;
    }

?>

このコードを実行すると、Resourceid#2 「リソースという単語が .txt にありません。どこから来たのかわかりません。」というメッセージが表示されます。

txt 内のすべての単語を表示するにはどうすればよいですか?

4

5 に答える 5

12

fopenただ使用する必要はありませんfile_get_contents

$file = "GermanWords.txt";
$contents = file_get_contents($file);
$lines = explode("\n", $contents); // this is your array of words

foreach($lines as $word) {
    echo $word;
}
于 2012-09-30T21:26:04.143 に答える
8

fopen()ファイルを開くだけで、読み取られません-コードに$fは、ファイルの内容ではなく、ファイルハンドルが含まれています。これが「リソース」という言葉の由来です。これは、ファイル ハンドルの PHP の内部名です。

1 つの答えは、に置き換えることfopen()ですfile_get_contents()。これにより、1 回のアクションでファイルが開き、読み取られます。これで問題は解決しますが、ファイルが大きい場合は、すべてを一度にメモリに読み込みたくないでしょう。

したがって、代わりに を使用することをお勧めしSplFileObject()ます。コードは次のようになります。

<?php
$file = "GermanWords.txt";
$parts = new SplFileObject($file);
foreach ($parts as $line) {
    echo $line;
}
?>

一度に 1 行ずつメモリに読み込むだけなので、ファイルのサイズを気にする必要はありません。

それが役立つことを願っています。

詳細については、PHP マニュアルを参照してください: http://php.net/manual/en/splfileobject.construct.php

于 2012-09-30T21:27:52.710 に答える
1

$fの結果はfopenリソースであり、ファイルの内容ではありません。ファイルに含まれる行の配列だけが必要な場合は、次を使用できますfile

$parts = file('GermanWords.txt');
foreach($parts as $v){
    echo $v;
}

または、そのまま使い続けたい場合は、コンテンツを読むためにfopen使用できます。fread

$f = fopen('GermanWords.txt', 'r');
// read the entire file into $contents
$contents = fread($f, filesize('GermanWords.txt'));
fclose($handle);
$parts = explode("\n", $contents);
于 2012-09-30T21:26:05.153 に答える