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


Check if string contains all values in array with php

到目前为止我所拥有的:

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

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

解决方案

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"字符串包含所有子字符串"needs"时,希望执行操作,因此一旦发现不在haystack中的针,就可以安全地返回false

其他

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

适用于任何可能需要其他方式的人。我是在寻找解决方案时想到这个的。确保要测试的是两个阵列;

$var1 = explode(' ',"a string to be turned to an array");
$var2 = ["test","a","string","array"];

获取两个数组的计数(或长度);

$var1count = count($var1);
$var2count = count($var2);

//使用array_entersect()方法获取两个数组的交集

$intersect = array_intersect($var1,$var2);

//检查相交的计数(或长度)是否与测试变量(例如$var1)相同

if(count($intersect)===$var1count)//it has all the words

仅供参考:区分大小写。您可能希望将所有转换为小写或大写