使用php检查字符串是否包含数组中的所有值

Cor*_*son 1 php arrays string

到目前为止我所拥有的:

$searchQuery = "keyword1 keyword2";
$searchArray = explode(" ", $searchQuery);
$stringToCheck = "keyword1 keyword3 keyword2";
foreach ($searchArray as $searchKeyword) {
    if (strpos($stringToCheck, $searchKeyword) !== false) : 
    //do something
    endif;
}
endif;
Run Code Online (Sandbox Code Playgroud)

我想要的是仅当在字符串中找到搜索查询中的所有值时才显示某些内容。在我上面当前的代码中,如果字符串包含keyword1和keyword2,它会“做某事”两次,每次匹配一次。如果字符串只包含keyword1而不包含keyword2,它也会显示为true,在这种情况下,它会显示内容一次。

Geo*_*hij 5

解决方案

function str_contains_all($haystack, array $needles) {
    foreach ($needles as $needle) {
        if (strpos($haystack, $needle) === false) {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

用法:

$haystack = 'foo, bar, baz';
$needles = array('foo', 'bar', 'baz');

if (str_contains_all($haystack, $needles)) {
    echo "Success\n";
    // ...
}
Run Code Online (Sandbox Code Playgroud)

笔记

由于您指定只希望在“haystack”字符串包含所有子字符串“needles”时执行操作,false因此一旦发现不在 haystack 中的针,就可以安全地返回。

其他

根据我的经验,在 PHP 中使用if (...): /* ... */ endif;它相当不常见。我认为大多数开发人员会更喜欢 C 风格的if (...) { /* ... */ }语法。