2012-05-15 107 views
0

我知道这个问题之前已被问过,但我还没有能够获得提供的解决方案的工作。检查是否在字符串中找到数组中的任何项目

我试图检查数组中的单词是否与所提供的字符串中的任何单词(或单词的一部分)匹配。

我目前有以下代码,但它只适用于数组中的第一个单词。其余的人总是返回假。

“输入”将是“干草堆”和“值”将是“针”

function check($array) { 
    global $input; 
    foreach ($array as $value) { 
      if (strpos($input, $value) !== false) { 
        // value is found 
        return true; 
      } else { 
       return false; 
      } 
    } 
} 

实施例:

$input = "There are three"; 
if (check(array("one","two","three")) !== false) { 
    echo 'This is true!'; 
} 

在上文中,“一串有一个“返回为真,但”有两个“或”有三个“的字符串都返回false。

如果可以使用不涉及必须使用正则表达式的解决方案,那就太好了。谢谢!

+0

,你的问题不清楚,所以什么确切的内容$的输入?一个字符串,一个数组? – Sliq

+0

$ input是一个字符串,如“有三个”。我试图检查数组中的单词是否与$ input字符串中的任何单词(或单词的一部分)匹配。 – Brian

回答

0

strpos();完全是错在这里,你应该简单地尝试

if ($input == $value) { 
    // ... 
} 

,并通过

if ($input === $value) { // there are THREE of them: = 
    // ... 
} 

你甚至可以检查变量的类型是相同的(字符串,整数,...)

更专业的解决方案将是

in_array(); 

它检查键或值的存在。

+0

这将无法匹配像OP试图做的子字符串。 – Banaan

1

这里的问题是,检查总是$array的第一项后返回。如果找到匹配项,则返回false,否则返回true。在返回语句之后,函数完成并且其余项不会被检查。

function check($array) { 
    global $input; 
    foreach($array as $value) { 
     if(strpos($input, $value) !== false) { 
      return true; 
     } 
    } 
    return false; 
} 

当找到一个匹配,还是假的,当它在$array通过所有的值了上面只有该函数返回真。

0

这里的问题是,你打破了函数返回语句..所以你总是在第一次比较后切出。

0

您在$array的每次迭代中都返回,因此它只会运行一次。您可以使用stristrstrstr来检查$input中是否存在$value

像这样:

function check($array) { 
    global $input; 
    foreach ($array as $value) { 
     if (stristr($input, $value)) { 
      return true; 
     } 
    } 
    return false; 
} 

这将然后依次通过阵列的每个元素,并返回true如果发现匹配,如果不是,循环结束则返回假之后。

如果需要检查,如果在$input存在每个单个项目你必须做一些事情有点不同,有点像:

function check($array) { 
    global $input; 
    $returnArr = array(); 
    foreach ($array as $value) { 
     $returnArr[$value] = (stristr($input, $value)) ? true : false; 
    } 
    return $returnArr; 
} 


echo '<pre>'; var_dump(check($array, $input)); echo '</pre>'; 

// outputs 

array(3) { 
    ["one"]=> 
    bool(false) 
    ["two"]=> 
    bool(false) 
    ["three"]=> 
    bool(true) 
} 
0

你应该使用in_array()的阵列比较值。

function check($array) { 
    global $input; 
    foreach ($array as $value) { 


     if (in_array($value,$input)) 
     { 
     echo "Match found"; 
     return true; 
     } 
    else 
     { 
     echo "Match not found"; 
     return false; 
     } 
    } 
} 
+0

让我知道这是否有效。 – shivgre

0

的原因,你的代码不工作,是因为你通过数组循环,但你不保存你所得到的结果,所以才有了最后的结果“罪状”。 在下面的代码我通过了结果到一个名为$output变量:

function check($array) { 
    global $input; 
    $output = false; 
    foreach ($array as $value) { 
     if (strpos($input, $value) != false) { 
      // value is found 
      $output = true; 
     } 
    } 
    return $output; 
} 

,你可以使用它像这样:顺便说

$input = "There are two"; 
$arr = array("one","two","three"); 
if(check($arr)) echo 'this is true!'; 
相关问题