我知道之前已经问过这个问题,但我无法让所提供的解决方案起作用。
我正在尝试检查数组中的单词是否与提供的字符串中的任何单词(或部分单词)匹配。
我目前有以下代码,但它只适用于数组中的第一个单词。其余的人总是假的。
“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。
如果可以使用不涉及使用正则表达式的解决方案,那将是很好的。谢谢!
答案 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
的每次迭代中返回,因此它只会运行一次。您可以使用stristr
或strstr
来检查$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!';