【问题标题】:Output only lines with duplicate words仅输出包含重复单词的行
【发布时间】:2017-08-06 03:01:25
【问题描述】:

我正在尝试获取行列表,并让 PHP 只输出两次包含相同单词(变量)的行。它应该匹配单词的单数和复数版本。

行列表示例:

这是所有网站中最好的网站

这是一个很棒的网站

这是我在找网站时发现的一个网站

网站是一个很酷的新词

我会将这些行放入文本框中,脚本会输出:

这是所有网站中最好的网站

这是我在找网站时发现的一个网站


不需要显示任何计数,只显示包含两次单词的原始行。

我很擅长处理线条,但我到处寻找答案,似乎不存在。

【问题讨论】:

标签: php arrays duplicates output lines


【解决方案1】:

出于测试目的,我没有使用$text = $_POST['text'];之类的东西,而是使用了一个变量来存储文本,而且我用来复数单词的类来自here

注意:我回滚了答案以准确解决问题,之前试图解决 cmets 的答案已被移动 here

<?php    

$text = "This is a best website of all the websites out there
    This is a great website
    Here is a website I found while looking for websites
    Website is a cool new word';
// helps us pluralize all words, so we can check the duplicates 
include('class.php'); 

// loop into each line one by one
foreach(explode("\n", $text) as $line)
{
        // remove special characters
        $tline = preg_replace('/[^A-Za-z0-9\-\s]/', '', $line);

        // create a list of words from current line
        $words_list = preg_split('/\s+/', strtolower($tline));

        // convert all singular words to plural
        foreach($words_list as $word)
        {
                $w[] = Inflect::pluralize($word);
        }

         // if the count of words in this line was bigger that of unique
         // words then we got some duplicates, echo this line out
        if( count($w) > count(array_unique($w)) )
                echo $line . '</br>';

        // empty the array for next line
        $w = [];
}

你想要的文本的输出是:

This is a best website of all the websites out there
Here is a website I found while looking for websites

但是代码的正确性实际上取决于我们的复数方法是如何工作的。


它是如何工作的

首先,我使用一个一个循环进入每一行,在每次迭代中,我都会从该行创建一个单词列表,然后我们应该将所有单数单词转换为复数(或将复数转换为单数)真的很重要),现在我有一个单词列表,所有单词都是复数,我可以很容易地检查它们是否都是唯一的,如果该行上的单词数大于唯一的那么我可以发现那里有重复的单词,所以我应该把那行打印出来。

【讨论】:

  • 它很接近,但不适用于某些单词...例如,试试这个:在二十一点桌上玩二十一点。这是一个二十一点游戏。我最喜欢的二十一点和二十一点。哇一个伟大的二十一点游戏。此示例仅输出单行“Playing blackjack on the blackjack table”。当有两行包含两次“blackjack”时。
  • 正如我所说,这取决于我们负责单词复数的班级,除非创建一个能够为整个英语语言做到这一点的真正更好的班级,否则我们无能为力。
  • 非常感谢您的帮助。这接近工作了......我正在尝试我知道如何做的每一个修改,但我无法让它工作。
  • 因为点...blackjack.blackjack 不同。
  • @Joe 学了一点 PHP,并不难……我什至不记得我最后一次用 PHP 编写项目是什么时候,或者继承人愿意为你开发它。 php.net 也是你的朋友 ;)
猜你喜欢
  • 2021-01-27
  • 1970-01-01
  • 2019-06-16
  • 2021-03-19
  • 2011-09-09
  • 1970-01-01
  • 2018-08-07
  • 2021-05-24
  • 1970-01-01
相关资源
最近更新 更多