2011-07-01 105 views
2

我試圖讓這個腳本正常工作。Foreach strpos問題。在另一個字符串中查找字符串

的想法是,如果輸入的字符串($query)'/t'啓動,幷包含的$trigger一個關鍵詞,一個$error設置。

我不能得到這個工作,我不知道爲什麼。

<?php 

    $error = false; 

    $triggers = array('sell', 'buy', 'trade', 'trading'); 

    $query = 'buying stuff'; 

    if (!empty($query)) { 

     if (substr($query, 0, 2) != '/t') { 

      foreach ($triggers as $trigger) { 

       if (strpos($query, $trigger)) { 

        $error = true; 
       } 
      } 
     } 
    } 

    if ($error) { 

     echo "fail"; 
    } 
    else { 

     echo "pass"; 
    } 

?> 

這應該引發了錯誤,但它似乎並沒有。我究竟做錯了什麼?

回答

5

如果函數strpos未能找到字符串,則返回false。還要注意,如果搜索字符串在最開始被找到,則返回0

變化

if (strpos($query, $trigger)) { 

if (strpos($query, $trigger) !== false) { 
+0

謝謝!我錯過了PHP文檔。 –

+0

@imoda我還會在'$ error = true;'之後添加一個'break'來安全地處理一些不需要的迭代。 – Yoshi

0
<?php 

    $error = false; 

    $triggers = array('sell', 'buy', 'trade', 'trading'); 

    $query = 'buying stuff'; 

    if (!empty($query)) { 

     if (substr($query, 0, 2) != '/t') { 

      foreach ($triggers as $trigger) { 

       if (strpos($query, $trigger) !== false) { 

        $error = true; 
        break; 
       } 
      } 
     } 
    } 

    if ($error) { 

     echo "fail"; 
    } 
    else { 

     echo "pass"; 
    } 

?> 

請使用 「break」 關鍵詞,用正確的檢查一起。

希望它有幫助。

1

改變這

if (strpos($query, $trigger) !==false) { 

結賬如何strpos工作

+0

雙引號爲什麼?這不是一個製表符 – zerkms

+0

雙引號或單引號沒有什麼區別。 –

+0

無關緊要的答案。 – DhruvPathak

1

現在的問題是:

if (strpos($query, $trigger)) { 

如果字符串在索引0,這將導致IF語句發現這個計算結果爲0爲虛假 so use

(strpos($query,$trigger) !== false)

相關問題