1

我正在尝试从正文中找到所有独特的整个单词。目前这是我正在使用的,但它似乎没有工作:

$textDump = "cat dog monkey cat snake horse"
$wholeWord = "/[\w]*/";
$uniqueWords = (preg_match($wholeWord, $textDump, $matches));

任何帮助,将不胜感激。谢谢!

4

4 回答 4

6
array_unique(
    str_word_count($textDump,1)
);
于 2013-02-11T17:56:07.920 回答
2

您可以使用 str_word_count

$textDump = "cat dog monkey cat snake horse";
$uniqueWords = (str_word_count($textDump, 1);
于 2013-02-11T17:56:10.073 回答
1

到目前为止给出的答案都假设,“找到所有唯一的整个单词”你的真正意思是“删除重复项”。实际上你的问题不是很清楚,因为你没有在你的例子中指定你想要的输出是什么,但我会相信你的话并为“找到所有唯一的完整单词”提供一个解决方案。

这意味着,对于输入:

"cat dog monkey cat snake horse"

你会得到输出:

"dog monkey snake horse"

实际上,str_word_count与 一起对此也很有用array_count_values,它实际上计算了不同的

$wordCount = array_count_values(str_word_count($textDump,1));

$wordCount就是现在:

array(5) {
  ["cat"]    => int(2)
  ["dog"]    => int(1)
  ["monkey"] => int(1)
  ["snake"]  => int(1)
  ["horse"]  => int(1)
}

接下来,删除字数大于 1 的单词(注意,实际的单词是数组键,所以我们array_keys用来获取它们:

$uniqueWords = array_keys(
    array_filter(
        $wordCount,
        function($count) {
            return $count === 1;
        }
    )
);

$uniqueWords就是现在:

array(4) {
  [0] => string(3) "dog"
  [1] => string(6) "monkey"
  [2] => string(5) "snake"
  [3] => string(5) "horse"
}

完整代码:

$textDump = "cat dog monkey cat snake horse";
$wordCount = array_count_values(str_word_count($textDump,1));
$uniqueWords = array_keys(
    array_filter(
        $wordCount,
        function($count) {
            return $count === 1;
        }
    )
);
echo join(' ', $uniqueWords);
//dog monkey snake horse
于 2013-02-11T18:23:42.077 回答
1

在这种情况下,为什么不使用explode();and来实现这array_unique();一点?

$text = "cat dog monkey cat snake horse";

$foo = explode(" ", $text);
print_r(array_unique($foo)); 
于 2013-02-11T17:57:31.277 回答