我知道这个问题以前被问过,但我无法让提供的解决方案起作用。
我正在尝试检查数组中的单词是否与提供的字符串中的任何单词(或部分单词)匹配。
我目前有以下代码,但它仅适用于数组中的第一个单词。其余的总是返回 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
,因此它只会运行一次。您可以使用stristr
或strstr
来检查$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!';