问题:
假设我在搜索框中输入$keyword =一个句子,例如"large white boxes"
我需要做的是将其分解成单独的单词,然后测试每个单词以确保a *不会出现在前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',并结束例程-即使条件没有满足!
如果我自己运行' If '语句,在WHILE循环之外,它工作得很好,对前3个位置的a *响应为真,对其他所有位置响应为假…
我做错了什么??
在stripos
的文档中有一个巨大的红色警告,您应该注意。
也就是说,在检查返回值是否为< 3
之前,需要先检查返回值是否为!== false
。
作为题外话,当explode(',', $keyword)
可用时,为什么要麻烦strtok
?
这种变化似乎有效。
$keyword = "large white boxes";
$token = strtok($keyword, " ");
while ($token !== false) {
echo $token;
$pos = stripos($token, "*");
if ($pos < 3 && $pos !== false) {
return;
}
$token = strtok(" ");
}