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

时间:2012-05-15 07:01:37

标签: php arrays

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

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

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

“input”将是“haystack”,“value”将是“needle”

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。

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

6 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

strpos();这里完全错了,你应该试试

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

并通过

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

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

更专业的解决方案

 in_array();

检查密钥或值的存在。

答案 2 :(得分:0)

这里的问题是你在退货声明中突破了这个功能。所以你总是在第一次比较后就切断了。

答案 3 :(得分:0)

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

这样的事情:

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)
}

答案 4 :(得分: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;
      }
    }   
}

答案 5 :(得分: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!';