0

I need to get an end result which loads a txt file counts how many times each word has been used and echos the results. The code is used is given below.Looking forward for valuable suggestions...

<?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>"; 

 ?> 
7
  • 2
    What is your question, what doesn't work? Commented Jan 30, 2012 at 11:04
  • The first comment I would make is that you should swap the explode() for preg_split('/\s+/', $text); so you can account for multiple spaces, tabs, newlines etc. Commented Jan 30, 2012 at 11:05
  • besides the fact that you're not using PHP's built-in str_word_count() function to generate your list of words and frequencies, what exactly is the problem Commented Jan 30, 2012 at 11:05
  • Little sidenote, the $numbers variable in the first foreach loop should rather be named $words, as those are words from your text file, and not numbers. Commented Jan 30, 2012 at 11:07
  • What is the issue? What is the error? Put the error here and use error_reporting(E_ALL); at the begging of the file. Commented Jan 30, 2012 at 11:07

1 Answer 1

1

You almost got it, but there are a few things that need to be changed.

fopen() function opens up a file (in this case for reading) returns a resource (a handle of the file), which we use to read the file. It DOES NOT return file contents. If you need further information, please check fopen() documentation. I substituted fopen() with file_get_contents() just for the sake of simplicity.

Secondly, as @DaveRandom suggested, it would be a good idea to substitute explode() for preg_split('/\s+/', $text);, because that way it would be able to deal with multiple spaces. Of course, this is not necessary, but recommended.

And lastly, I found that with preg_split('/\s+/', $text) the script had an empty element, thus I added an if statement to make sure we do not add empty strings. This step is also not required, so if you do not need it, just remove the first if statement.

And here is the modified source code:

<?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>"; 

?>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.