2012-09-30 55 views
3

我感覺我幾乎在那裏。 這裏是一個.txt文件,大約60千字節並且充滿了德語單詞。每一個字都在一個新的線上。在PHP中讀取並迭代.txt

我想通過它,使用此代碼重複:

<?php 

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

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

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

?> 

當我執行這個代碼,我得到:Resourceid#2 這個詞的資源是不是在txt文件,我不知道它從何而來。

我該如何設法顯示txt中的所有單詞?

回答

7

無需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; 
} 
+1

如果文件大小是真正的大(這是不是這種情況下),它提出了在服務器上的一個偉大的負載。在這種情況下'fgets'更好 – Vultour

1

$ffopen結果是一種資源,而不是文件的內容。如果你只是想包含在文件中的行的數組,可以使用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); 
6

fopen()只是打開文件,它不會讀取它 - 在您的代碼中,$f包含文件句柄,而不是文件內容。這是「資源」一詞的來源;它是PHP文件句柄的內部名稱。

一個答案是將fopen()替換爲file_get_contents()。這將打開並在一個動作中讀取文件。這可以解決問題,但是如果文件很大,你可能不想一次性將所有內容讀入內存。

所以我會建議改爲使用SplFileObject()。代碼將如下所示:

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

它只在一次內存中讀入一行,因此您不必擔心文件的大小。

希望有所幫助。

查看PHP手冊以獲得更多信息:http://php.net/manual/en/splfileobject.construct.php