如何检查每个数组对象在字符串中出现的次数,然后将其保存到单独的数组中?

时间:2015-02-04 01:51:40

标签: php arrays

基本上我在这里尝试做的是获取文本输入(段落),然后将每个单词保存到数组中。然后我想检查数组中的每个单词与原始段落,看看它发生了多少次。通过这样做,我希望能够检查主题是什么。最初我开始这是一个开放式的学校项目,但我更感兴趣的是找到如何为我自己的理智做这件事。 这是我的代码(这是我在上面的html代码中请求文本输入后):

$paragraph = $_POST['text'];
$paragraph = str_replace('   ',' ',$paragraph);
$paragraph = str_replace('  ',' ',$paragraph);
$paragraph = strtolower($paragraph);
$words = explode(" ",$paragraph);
$count = count($words);
for($x = 0; $x < $count; $x++) {
    echo $words[$x];
    echo "<br/>";
}

到目前为止,我已经能够将单词全部小写并替换文本中的所有额外空格,然后将其保存到数组中。现在我只是在显示这些词语。

这是我遇到一些问题的地方。我以为我可以有一个多维数组,它可以是

$words[1]["word"][0]["amount"];

这个词将是段落中的实际单词,金额将计算它在段落中出现的次数。如果有人有这样做的基本概念,或者我在这里缺少一些东西,我将非常感谢你的帮助。我需要帮助的主要是检查段落中每个单词出现的次数。我无法让它工作(它在之前的for循环中):

substr_count($words[$x],$paragraph)

总结一下,我试着拿一个段落,将每个不同的单词保存到一个数组中(我已成功地完成了这个),然后将单词在段落中显示的次数保存到不同的数组中(或者一个多维数组)。一旦我得到这些数据,我将看到我最常用的词,同时过滤掉“the”和“a”等填充词。

1 个答案:

答案 0 :(得分:1)

最好使用preg_replace('/\W+/', ' ', $paragraph);并将其余代码简化为:

$paragraph = preg_replace('/\W+/', ' ', $paragraph);
$filter = array('the', 'a');
$words = explode(' ',$paragraph);
$countWords = array();
foreach($words as $w)
{
    if(trim($w) != "" && array_search($w, $filter) === false)
    {
        if(!isset($countWords[$w]))
            $countWords[$w] = 0;

        $countWords[$w] += 1;
    }
}

这将为您提供每个单词的使用次数。如果您不关心案例,那么您可以使用$countWords[strtolower($w)]代替。另外,通过我添加的$filter数组,您可以添加您不想在其中计算的任何单词。