计算单词列表的出现次数 - >然后更新WordPress表中的值

时间:2015-07-15 20:07:53

标签: php regex wordpress count

我正在寻找文字中的多个单词。我从wordpress表(LIST)中得到了一些文字,其中我有两列(WORD和OCCURRENCES):

$result = $wpdb->get_col( "SELECT WORD FROM LIST");
$data = implode('|', $result);
$val = "'/\b($data)\b/i'"; 

然后我用

if(preg_match($val,$text)) { UPDATE OCCURRENCES } 

用于搜索,其中

$val = "'/\b(word1|word2|word3!word4|word5|word6|...)\b/i'"; 

现在的问题是:我如何计算,如何获得每个单词的出现次数,以便将此值插入" LIST"桌子?有可能吗?

由于

EDIT 如果可能的话,我会更好地解释我想达到的目标。这是我的WordPress表(只是一个例子):

|  ID   |   WORD   |  OCCURRENCES  |
————————————————————————————————————
|   1   |   word1  |       23      | 
|   2   |   word2  |       17      | 
|   3   |   word3  |        9      | 
|   4   |   word4  |        5      | 
|   5   |   word4  |       12      | 

表中有一百多个字。如果我找到匹配项,代码应更新"出现次数值"

2 个答案:

答案 0 :(得分:0)

您可以使用preg_match_allarray_count_values 试试这样的事情 -

$val = "/\bword1|word2|word3\b/i";
//Example text
$text = "word1 word2 word3 word3 word2";

//This matches all occurences
if(preg_match_all($val,$text,$matches) > 0){
    //This counts the frequencies of each occurence
    $res = array_count_values($matches[0]);
    print_r($res);
}

/*OUTPUT
[
     "word1" => 1
     "word2" => 2
     "word3" => 2
]
*/

答案 1 :(得分:0)

这是一种可能的解决方案,它基于将单词捕获到组1中,然后用array_count_values计算其中的每个键出现次数:

$text = "word1 word4 word4 word6 word6 word6";
$val = '/\b(word1|word2|word3|word4|word5|word6)\b/i'; 
$arr = array();
if(preg_match_all($val,$text, $matches) > 0) {
    $arr = array_count_values($matches[1]);
    if ($arr["word1"] != NULL) { echo $arr["word1"] . PHP_EOL; };
    if ($arr["word2"] != NULL) { echo $arr["word2"] . PHP_EOL; };
    if ($arr["word3"] != NULL) { echo $arr["word3"] . PHP_EOL; };
    if ($arr["word4"] != NULL) { echo $arr["word4"] . PHP_EOL; };
    if ($arr["word5"] != NULL) { echo $arr["word5"] . PHP_EOL; };
    if ($arr["word6"] != NULL) { echo $arr["word6"] . PHP_EOL; };
} 

请参阅IDEONE demo

注意如果你没有将单词放入一个组(我决定使用捕获的单词),则必须重复单词边界,$matches[0]将保留值:

/\bword1\b|\bword2\b|\bword3\b/i