2012-01-30 120 views
0

我需要得到一個加載txt文件的最終結果,計算每個單詞已被使用和回聲結果的次數。代碼使用如下。尋找寶貴的建議...PHP讀取文件錯誤

<?php 
$text = fopen("words.txt", "r"); 
$textarray = explode(" ",$text); 
foreach($textarray as $numbers) 
    { 
    if(isset($str_count[$numbers])) 
    $str_count[$numbers]++; 
     else 
     $str_count[$numbers]=1; 
    } 

foreach($str_count as $words => $numbers) 
echo $words.": ".$numbers."<br>"; 

?> 
+2

你的問題是,什麼不起作用? – 2012-01-30 11:04:16

+0

我要做的第一個註釋是你應該爲'preg_split('/ \ s + /',$ text)交換'explode()'''這樣你就可以解釋多個空格,製表符,換行符等。 – DaveRandom 2012-01-30 11:05:14

+0

除了事實上,你沒有使用PHP的內置str_word_count()函數來生成你的單詞和頻率列表,究竟是什麼問題 – 2012-01-30 11:05:31

回答

1

你幾乎明白了,但有幾件事情需要改變。

fopen()函數打開一個文件(在這種情況下用於讀取)返回一個資源(文件句柄),我們用它來讀取文件。它不會返回文件內容。如果您需要更多信息,請查詢fopen() documentation。 只是爲了簡單起見,我用和file_get_contents()代替。

其次,按照@DaveRandom的建議,將explode()替換爲preg_split('/\s+/', $text);是一個好主意,因爲這樣可以處理多個空格。當然,這不是必需的,但推薦。

最後,我發現preg_split('/\s+/', $text)腳本有一個空的元素,因此我添加了一個if語句以確保我們不添加空字符串。這一步也不是必需的,所以如果你不需要它,只需刪除第一個if語句即可。

這裏是修改後的源代碼:

<?php 
$text = file_get_contents('words.txt'); 
$textarray = preg_split('/\s+/', $text); 
foreach($textarray as $numbers) 
{ 
    if(empty($numbers)) { 
     continue; 
    } 
    if(isset($str_count[$numbers])) 
     $str_count[$numbers]++; 
    else 
      $str_count[$numbers]=1; 
} 

foreach($str_count as $words => $numbers) 
    echo $words.": ".$numbers."<br>"; 

?> 
+0

謝謝Tautvidas .. – Arun 2012-01-31 07:06:27