2011-04-24 88 views
1

问题:PHP:IF语句适用于自己的,而不是内部,而循环

比方说,我有$关键字=句子输入到搜索框中,如“白色大盒子”

我需要做的是将其分解为单个单词,然后测试每个单词以确保*在前三个字母中不出现。 (所以,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循环之外,它工作得很好,响应忠实于前3个位置的*,而假的一切......

什么我可能会做错吗?

回答

0

这种变化似乎有效。

$keyword = "large white boxes"; 

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

while ($token !== false) { 
    echo $token; 
    $pos = stripos($token, "*"); 
    if ($pos < 3 && $pos !== false) { 
     return; 
    } 
    $token = strtok(" "); 
} 
+0

AWESOM E.在最初的测试中,这是工作的;-),我会测试更多当然......我将这个!==假加入并开始在这个方向上塑造......但你来到右边的人进入油漆灌注它!感谢大家对此的投入,我真的很感激! – Soyo 2011-04-25 01:21:34

2

有一个giant red warning in the documentation for stripos,你应该听从。

换句话说,您需要检查返回值是否为!== false,然后检查它是否为< 3

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

+1

谢谢...实际上,stripos已经在那里工作了...但是它检查整个短语的前3个字符,而不是短语中的单个单词。既然它没有问题,我真的没有看到它的那部分(虽然,我现在会)。当我尝试将它放在WHILE循环中时,我的问题就出现了。我实际上在一开始就使用了爆炸,但是在失败之后以strtok结束...... – Soyo 2011-04-25 00:03:15

+0

strtok实际上非常聪明。如果你有一个非常大的字符串,你不想一次爆炸它,因为无论如何你需要循环strtok是非常有效的。 – Halcyon 2011-04-25 00:31:47

+0

嗯,我希望我和strtok命令一样聪明,然后我想到了这一点;-) ...我试着根据Jon提出的一些变化,但仍然没有运气... – Soyo 2011-04-25 00:50:23