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

时间:2015-04-08 01:07:36

标签: 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;

我想要的是只有在字符串中找到搜索查询中的所有值时才显示某些内容。使用上面的当前代码,如果字符串包含keyword1和keyword2,那么"会做一些事情"两次,每场比赛一次。如果字符串仅包含keyword1但不包含keyword2,那么它也会出现,在这种情况下,它会显示一次内容。

1 个答案:

答案 0 :(得分:4)

解决方案

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

用法:

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

if (str_contains_all($haystack, $needles)) {
    echo "Success\n";
    // ...
}

备注

由于您指定希望在“haystack”字符串包含 all 子字符串“needle”时执行操作,因此可以安全地返回{{1一旦你发现一个不在大海捞针中的针头。

其他

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