2011-04-24 89 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