【问题标题】:Check if string contains all values in array with php用php检查字符串是否包含数组中的所有值
【发布时间】:2015-04-08 01:07:36
【问题描述】:

到目前为止我所拥有的:

$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,它也会出现,在这种情况下,它会显示一次内容。

【问题讨论】:

    标签: php arrays string


    【解决方案1】:

    解决方案

    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”字符串包含所有子字符串“needles”时执行操作,因此返回false 是安全的只要你发现一根不在大海捞针的针。

    其他

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

    【讨论】:

      【解决方案2】:

      对于任何可能需要另一种方式的人。我在寻找解决方案时想到了这个。 确保要测试的都是数组;

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

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

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-06
        • 1970-01-01
        • 2012-06-23
        • 2021-06-10
        相关资源
        最近更新 更多