1

问题:

假设我有 $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 个位置的 * 响应为真,对其他所有位置响应为假......

我可能做错了什么???

4

2 回答 2

2

文档中有一个巨大的红色警告stripos,您应该注意这一点。

换句话说,您需要在检查返回值!== false是否为 之前检查它是否为< 3.

顺便说一句,你为什么要打扰strtok什么时候explode(',', $keyword)有空?

于 2011-04-24T23:32:42.517 回答
0

这种变化似乎有效。

$keyword = "large white boxes";

$token = strtok($keyword, " ");

while ($token !== false) {
    echo $token;
    $pos = stripos($token, "*");
    if ($pos < 3 && $pos !== false) {
        return;
    }
    $token = strtok(" ");
}
于 2011-04-25T01:09:28.657 回答