0

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

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

我目前有以下代码,但它仅适用于数组中的第一个单词。其余的总是返回 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!';
} 

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

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

4

6 回答 6

1

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

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

上面的函数只在找到匹配项时返回 true,或者在遍历完$array.

于 2012-05-15T07:16:12.960 回答
0

The reason your code doesnt work, is because you are looping through the array, but you are not saving the results you are getting, so only the last result "counts". In the following code I passed the results to a variable called $output:

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

and you can use it like so:

$input = "There are two";
$arr = array("one","two","three");
if(check($arr)) echo 'this is true!';
于 2012-05-15T07:27:52.563 回答
0

这里的问题是你在 return 语句中打破了函数。所以你总是在第一次比较之后被删掉。

于 2012-05-15T07:16:56.317 回答
0

您将在 的每次迭代中返回$array,因此它只会运行一次。您可以使用stristrorstrstr检查是否$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)
}
于 2012-05-15T07:18:01.647 回答
0

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

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

并通过

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

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

更专业的解决方案是

 in_array();

它检查键或值的存在。

于 2012-05-15T07:09:05.413 回答
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;
      }
    }   
}
于 2012-05-15T07:19:16.563 回答