仅输出具有重复单词的行

时间:2017-08-06 03:01:25

标签: php arrays duplicates output lines

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

行列表示例:

  

这是所有网站的最佳网站

     

这是一个很棒的网站

     

这是我在寻找网站时找到的网站

     

网站是一个很酷的新词

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

  

这是所有网站的最佳网站

     

这是我在寻找网站时找到的网站

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

我在操纵线条方面相当不错,但我到处寻找答案,似乎不存在。

1 个答案:

答案 0 :(得分:1)

出于测试目的,我没有使用类似$text = $_POST['text'];的内容,而是使用了一个变量来存储文本。另外,我用来复数单词的类来自here

注意: 我回滚了答案以解决问题,之前的答案是试图解决评论的问题已被移动{ {3}}

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

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

它是如何工作的

首先,我逐个循环到每一行,在每次迭代我都是从那行开始的单词列表,然后我们应该将所有单数单词转换为复数(或复数到单数,它不会真的很重要),现在我有一个单词列表,所有单词都是复数,我可以很容易地检查它们,看看它们是否都是唯一的,如果该行上的单词数量大于唯一的单词数量然后,我可以发现那里有重复的单词,所以我应该打印出那条线。