检查在字符串中是否找到数组中的任何项


Checking if Any Item in Array is Found in a String

我知道这个问题以前被问过,但我无法让提供的解决方案起作用。

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

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

"

输入"将是"大海捞针","价值"将是"针"

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!';
} 
在上面,"有一个"的字符串返回

为true,但"有两个"或"有三个"的字符串都返回false。

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

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

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

上面的函数仅在找到匹配项时返回 true,或在遍历 $array 中的所有值时返回 false。

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

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

和通过

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

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

更专业的解决方案是

 in_array();

检查键或值是否存在。

这里的问题是你正在打破 return 语句的函数。所以你总是在第一次比较后剪掉。

你应该使用 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;
      }
    }   
}

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

像这样:

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

然后,这将遍历数组的每个元素并返回true如果找到匹配项,如果没有,则在完成循环后它将返回 false。

如果您需要检查$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)
}

你的代码不起作用的原因是因为你正在循环遍历数组,但你没有保存你得到的结果,所以只有最后一个结果"计数"。在下面的代码中,我将结果传递给一个名为 $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!';