2011-07-01 57 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)

相关问题