2012-01-30 122 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