Foreach strpos问题。在另一个字符串中查找字符

时间:2011-07-01 06:25:07

标签: php arrays foreach substr 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";
    }

?>

那应该会触发错误,但似乎不是。我做错了什么?

4 个答案:

答案 0 :(得分:5)

如果函数strpos找不到字符串,则返回false。另请注意,如果在开头找到搜索字符串,则会返回0

更改

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

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

答案 1 :(得分:1)

将此更改为

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

结帐strpos如何运作

答案 2 :(得分:1)

问题在于:

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

如果在索引0处找到字符串,则计算结果为0,这会导致IF语句为false 所以使用

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

答案 3 :(得分: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”关键字以及正确的检查。

希望它有所帮助。