【问题标题】:PHP: IF statement works on its own, but not inside WHILE loopPHP:IF 语句独立工作,但不在 WHILE 循环内
【发布时间】:2011-08-12 01:11:11
【问题描述】:

问题:

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

我可能做错了什么???

【问题讨论】:

    标签: php if-statement while-loop strtok


    【解决方案1】:

    您应该注意giant red warning in the documentation for stripos

    也就是说,在判断是否为&lt; 3之前,需要先判断返回值是否为!== false

    顺便说一句,当explode(',', $keyword) 可用时,您为什么还要打扰strtok

    【讨论】:

    • 谢谢...实际上,stripos 已经在那里并且正在工作...但是它正在检查整个短语的前 3 个字符,而不是短语中的单个单词。由于它可以正常工作,因此我真的没有研究它的那一部分(尽管,我现在会)。当我试图将它放在 WHILE 循环中时,我的问题就出现了。我实际上在一开始就使用了explode,但是在失败中最终使用了strtok ...
    • strtok 实际上非常聪明。如果你有一个非常大的字符串,你不想一次全部爆炸,因为你需要循环 strtok 是非常有效的。
    • 好吧,我希望我和 strtok 命令一样聪明,因为这样我就可以弄清楚了 ;-) ...我正在尝试根据 Jon 提出的观点进行一些变化,但仍然没有运气好...
    • @FritsvanCampen:当然。但是,您为易用性付出了高昂的“好处”。你真的需要它吗?
    【解决方案2】:

    这种变化似乎有效。

    $keyword = "large white boxes";
    
    $token = strtok($keyword, " ");
    
    while ($token !== false) {
        echo $token;
        $pos = stripos($token, "*");
        if ($pos < 3 && $pos !== false) {
            return;
        }
        $token = strtok(" ");
    }
    

    【讨论】:

    • 太棒了 E。在最初的测试中,这是有效的 ;-),我当然会测试更多...我正在合并 !== false 并开始朝着这个方向发展。 ..但是你直接进入油漆区就扣篮了!感谢大家对此的投入,我真的很感激!
    猜你喜欢
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2020-12-29
    • 1970-01-01
    相关资源
    最近更新 更多