PHP检查字符串的任何部分是否存在数组元素

时间:2014-08-10 14:02:57

标签: php

我知道如何查找字符串是否等于数组值:

$colors = array("blue","red","white");

$string = "white";

if (!in_array($string, $colors)) {
    echo 'not found';
}

...但是如何找到字符串CONTAINS数组值的任何部分?

$colors = array("blue","red","white");

$string = "whitewash"; // I want this to be found in the array

if (!in_array($string, $colors)) {
    echo 'not found';
}

6 个答案:

答案 0 :(得分:3)

或者一次性拍摄:

if( preg_match("(".implode("|",array_map("preg_quote",$colors)).")",$string,$m)) {
    echo "Found ".$m[0]."!";
}

这也可以扩展为只允许以数组中的项目开头的单词:

if( preg_match("(\b(?:".implode("|",array_map("preg_quote",$colors))."))",$string,$m)) {

或不区分大小写:

if( preg_match("(".implode("|",array_map("preg_quote",$colors)).")i",$string,$m)) {

仅限启动的CI:

if( preg_match("(\b(?:".implode("|",array_map("preg_quote",$colors))."))i",$string,$m)) {

或者其他任何东西;)

答案 1 :(得分:1)

只需循环包含值的数组,并使用strpos

检查它们是否在输入字符串中找到
$colors = array("blue","red","white");

$string = "whitewash"; // I want this to be found in the array

foreach ( $colors as $c ) {

    if ( strpos ( $string , $c ) !== FALSE ) {

         echo "found"; 

    }
}

您可以将其包装在一个函数中:

function findString($array, $string) {

    foreach ( $array as $a ) {

        if ( strpos ( $string , $a ) !== FALSE )
             return true;

    }

    return false;
} 

var_dump( findString ( $colors , "whitewash" ) ); // TRUE

答案 2 :(得分:1)

没有内置功能,但您可以执行以下操作:

$colors = array("blue","red","white");

$string = "whitewash"; // I want this to be found in the array

if (!preg_match('/\Q'.implode('\E|\Q',$colors).'\E/',$string)) {
    echo 'not found';
}

这基本上是从你的数组生成一个正则表达式并匹配它的字符串。好的方法,除非你的数组非常大。

答案 3 :(得分:1)

尝试这个有效的解决方案

$colors = array("blue", "red", "white");
$string = "whitewash";       
foreach ($colors as $color) {
    $pos = strpos($string, $color);
    if ($pos === false) {
       echo "The string '$string' not having substring '$color'.<br>";      
    } else {
         echo "The string '$string'  having substring '$color'.<br>";                
    }
}

答案 4 :(得分:0)

您必须迭代每个数组元素并单独检查它是否包含它(或它的子集)。

这与您想要做的类似: php check if string contains a value in array

答案 5 :(得分:-1)

$colors = array("blue","red","white");

$string = "whitewash"; // I want this to be found in the array

$hits = array();
foreach($colors as $color) {
   if(strpos($string, $color) !== false) {
      $hits[] = $color;
   }
}

$ hits将包含$ string中匹配的所有$颜色。

if(empty($hits)) {
    echo 'not found';
}