查找单词是否存在于数组或字符串PHP中

时间:2019-04-12 09:01:38

标签: php regex preg-match-all

我正在尝试查找单词数组中是否存在数组中的任何字符串。

例如:

$key = ["sun","clouds"];
$results = ["Sun is hot","Too many clouds"];

如果$key中存在$results中的任何一个,则返回true

使用以下脚本,我可以得到想要的结果,但前提是$results中的单词与$key中的单词完全一样。

function contain($key = [], $results){
    $record_found = false;
    if(is_array($results)){

        // Loop through array
        foreach ($results as $result) {
             $found = preg_match_all("/\b(?:" .join($key, '|'). ")\b/i", $result, $matches);
             if ($found) {
                $record_found = true;
             }
        }

     } else {

         // Scan string to find word
         $found = preg_match_all("/\b(?:" .join($key, '|'). ")\b/i", $results, $matches);
         if ($found) {
            $record_found = true;
         }

      }

      return $record_found;

 }

如果$results中的单词是Enjoy all year round **sunshine**,则我的函数返回false,因为找不到单词sun。如果字符串包含该字符串作为单词的一部分,如何更改函数以返回true?

我希望单词sunsunsunshine都匹配。

TIA

1 个答案:

答案 0 :(得分:1)

因此,您可以从here支票 而不是用正则表达式在循环中使用它+ mb_strtolower

<?php
$keys = ["sun","clouds"];
$results = ["Sun is hot","Too many clouds"];

foreach ($keys as $key) {
    foreach ($results as $result) {     
        if (strpos(mb_strtolower($result), mb_strtolower($key)) !== false) {
            return true;
        }
    }
}
return false;