问题:
假设我在搜索框中输入了$ keyword =一个句子,例如“大白框”
我需要做的是将其分解为单个单词,然后测试每个单词以确保*不出现在前3个字母中。 (所以,sen *会好的,但是se *会不会好的)。如果*确实出现在任何单个单词的前3个字母中,那么“if($ keyword)...”过程需要结束。
if ($keyword) {
$token = strtok($keyword, " ");
while ($token != false) {
echo $token;
if (stripos($token,"*") < 3 ) {
return;
}
$token = strtok(" ");
}
...代码继续......
正如你所看到的,我每次都回应它看待处理。
如果我删除'if'代码,那么它会输出'largewhiteboxes'并按预期继续。
如果我按原样保留'if'代码,则仅输出'large',并且例程结束 - 即使条件未满足!
如果我在WHILE循环之外单独运行'if'语句,它可以正常工作,在前3个位置对*做出响应,对其他所有位置都为false ...
我可能做错了什么???
答案 0 :(得分:2)
你应该注意giant red warning in the documentation for stripos
。
换句话说,在检查是否为!== false
之前,您需要检查返回值< 3
。
顺便说一下,为什么在strtok
可用时你会为explode(',', $keyword)
而烦恼?
答案 1 :(得分:0)
这种变化似乎有效。
$keyword = "large white boxes";
$token = strtok($keyword, " ");
while ($token !== false) {
echo $token;
$pos = stripos($token, "*");
if ($pos < 3 && $pos !== false) {
return;
}
$token = strtok(" ");
}