Skip to main content

PHP read file error



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



?>




Comments

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

    ?>

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.