首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要有逻辑的建议来编写这个php练习。

问需要有逻辑的建议来编写这个php练习。
EN

Stack Overflow用户
提问于 2013-01-22 20:10:29
回答 1查看 239关注 0票数 1

我在一个文本文件中找到了一个列表,上面列出了英语中使用最多的1000个单词。每一行最多有50个单词,如下所示:

东西,是,东西,嗨,再见,你好,a,东西 酷,免费,太棒了,祈祷,就是犯罪 等。

我需要用该文件作为输入来编写代码,以便生成一个输出文件,其中包含至少50个不同列表中出现的一对单词。例如,在上面的示例中,&是一起出现两次,但其他每对只出现一次。

我不能储存所有可能的词,所以没有蛮力。

我正在努力学习这门语言,我被这本书的练习困住了。请帮帮忙。任何逻辑、指导或代码都会对我有帮助。

这就是我到目前为止所拥有的。它做不到我想做的,但我被困住了:

代码:

代码语言:javascript
复制
//open the file
$handle = fopen("list.txt", 'r');

$count = 0;
$is = 0;
while(!feof($handle)) {

    $line = fgets($handle); 

    $words = explode(',', $line);

    echo $count . "<br /><br />";
    print_r($words);
    foreach ($words as $word) {
        if ($word == "is") {
            $is++;
        }
    }
    echo "<br /><br />";

$count++;
}

echo "Is count: $is";

//close the file
fclose($handle);

$fp = fopen('output.txt', 'w');
fwrite($fp, "is count: " . $is);
fclose($fp);

这是我想出来的,但我觉得太臃肿了:

计划:

检查$words数组的第一个值

将值存储到$cur_word中

将$cur_word存储为数组中的键($compare)和

将计数器(行号)存储为该键的值

现在是1点

看看$cur_word是否在每一行上,如果是的话

如果数组至少有50个值,则将该值以$cur_word键放入$cur_word中,然后继续

否则转到$words数组的下一个值。

如果它有50个值

转到下一个值并执行相同的操作

比较这两个列表以查看有多少值匹配。

如果它至少是50,那么追加

输出文件中的单词。

用每个单词重复这个过程

EN

回答 1

Stack Overflow用户

发布于 2013-01-23 01:43:06

这个问题大概有一百种解决办法。这里有一个

代码语言:javascript
复制
$contents = file_get_contents("list.txt");

//assuming all words are separated by a , and converting new lines to word separators as well
$all_words = explode(",", str_replace("\n", ",", $contents)); 
$unique_words = array();    
foreach ($all_words as $word) {
    $unique_words[$word] = $word;
}

这将给出数组中文件中所有唯一的单词。

您也可以使用相同的技术来计算单词。

代码语言:javascript
复制
$word_counts = array();
foreach ($all_words as $word) {
    if (array_key_exists($word, $word_counts)) {
        $word_counts[$word]++;
    } else {
        $word_counts[$word] = 1;
    }
}

然后,您可以循环遍历并保存结果。

代码语言:javascript
复制
$fp = fopen("output.txt", "w");
foreach ($word_counts as $word => $count) {
    fwrite($fp, $word . " occured " . $count . " times" . PHP_EOL);
}
fclose($fp);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14467155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档