String包含数组中的所有项(不区分大小写)

tar*_*eld 26 php arrays string contains

如何检查a是否$string包含数组中表达的任何项?

$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(contains($string,$array))
{
// do something to say it contains
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

zom*_*bat 80

I don't think there is a built-in function that will handle what you want. You could easily write a contains() function however:

function contains($str, array $arr)
{
    foreach($arr as $a) {
        if (stripos($str,$a) !== false) return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

  • +1不是非常复杂,使用正则表达式,或尝试将它们全部放在一行中. (35认同)
  • 给使用 Laravel 的开发人员的提示:此方法从 5.7 开始以 `Str::contains(string $haystack, array|string $needles)` 和 `str_contains(string $haystack, array|string $needles)` 的形式存在于框架中5.6 版。https://laravel.com/docs/8.x/helpers#method-str-contains (10认同)
  • 为什么不regexp?我认为它不要难以解释preg_match('/'.implode('|',$ arr).'/ i',$ str) (4认同)
  • @velop 虽然是一种有效的方法,但在功能上并不等效。需要考虑通过正则表达式进行匹配来编写该数组。否则,如果数组中的任何字符串包含 / 或 | 或任何其他修饰符,它会提供意想不到的结果。 (2认同)

sbc*_*czk 21

那是你想要的吗?我希望代码编译:)

$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))
{
  //do sth
}
Run Code Online (Sandbox Code Playgroud)

  • 这会在字符串上失败:"汤姆,你觉得怎么样?" "他的'名字'是汤姆." 其中许多人. (14认同)

小智 11

使用接受的答案:

$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))
{
  //do sth
}
Run Code Online (Sandbox Code Playgroud)

请注意,if语句可以更改为:

if(0 < count(array_intersect(explode(' ', strtolower($string)), $array)))
Run Code Online (Sandbox Code Playgroud)

因为没有必要使用array_map来应用于strtolower每个元素.而是将它应用于初始字符串.


MaY*_*aNk 8

我们可以检查给定字符串中是否存在数组的任何元素。

$string = 'My nAmE is Tom.';
$array = array("name","tom");

if(str_replace($array, '', strtolower($string)) !== strtolower($string)) {
   // If String contains an element from array      
   // Do Something
}
Run Code Online (Sandbox Code Playgroud)


Pau*_*man 7

像这样的事情会起作用:

$string = 'My nAmE is Tom.';
$array = array("name", "tom");
foreach ($array as $token) {
    if (stristr($string, $token) !== FALSE) {
        print "String contains: $token\n";
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 7

包含函数的另一个解决方法

function contains($string, $array, $caseSensitive = true)
{
    $stripedString = $caseSensitive ? str_replace($array, '', $string) : str_ireplace($array, '', $string);
    return strlen($stripedString) !== strlen($string);
}
Run Code Online (Sandbox Code Playgroud)

PS.至于我,我只是在没有功能的情况下使用它..

if (strlen(str_replace($array, '', $string)) !== strlen($string)) {
    // do it
}
Run Code Online (Sandbox Code Playgroud)