2011-04-24 4 views
1

問題:PHP:文が独自に動作するかどうかではなく、内側のWHILEループ

するのは、私は$キーワードを持っているとしましょう=文は、このような「大きな白い箱」として、検索ボックスに

に入りました私がする必要があるのは、これを個々の単語に分解し、各単語をテストして、*が最初の3文字以内に現れないことを確認することです。 (したがって、セン*は大丈夫ですが、セ*は大丈夫です)。 a *が個々の単語の最初の3文字に現れた場合、 "if($ keyword)..."プロセスを終了する必要があります。コードが続く

if ($keyword) { 


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

... ...

あなたが見ることができるように、私が処理するそれを見るために、それぞれの時間をエコーし​​ています。

「if」コードを取り除くと、「largewhiteboxes」が出力され、期待どおりに続行されます。

「if」コードをそのまま残しておけば、条件が満たされていなくても「large」のみが出力され、ルーチンは終了します!

私は声明独自のon「の場合」、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.最初のテストで、これは動作しています;-)、私はいくつかのコースをもっとテストします...私は!== falseを組み込み、この方向に形を作り始めました...しかし、ペイントにそれをダンクした!私は本当にありがとう! – Soyo

2

あなたが耳を傾けるべきであるgiant red warning in the documentation for striposがあります。

つまり、< 3であることを確認する前に戻り値!== falseをチェックする必要があります。

explode(',', $keyword)が利用可能な場合は、よろしくお願い致します。strtokにお困りのことは?

+1

実際には、すでにstriposはすでに存在していましたが、フレーズ内の個々の単語ではなく、フレーズ全体の最初の3文字を確認していました。それは問題なく働いていたので、私は実際にその部分を見ていませんでした(ただし、私は今)。 WHILEループの内側に配置しようとすると、私の問題が発生しました。私は実際に最初に爆発を使用しましたが、失敗の中でstrtokで終わった... – Soyo

+0

strtokは実際には本当に賢いです。あなたが本当に大きな文字列を持っていれば、すぐにそれをすべて爆発させたくなく、とにかくループする必要があるので、strtokは非常に効率的です。 – Halcyon

+0

さて、私はstrtokコマンドのように賢いと思っていましたが、私はこれを理解しておきたいと思っていました;-)私はJonが育てたポイントに基づいていくつかのバリエーションを試していますが、まだ運がありません... – Soyo

関連する問題