2

我试图让这个脚本工作。

这个想法是,如果输入字符串($query)不以'/t'AND 开头包含其中一个$trigger单词,$error则设置 an。

我不能让它工作,我不知道为什么。

<?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

4 回答 4

5

如果函数strpos找不到它返回的字符串false。另请注意,如果在一开始就找到搜索字符串,0则返回 a。

改变

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

if (strpos($query, $trigger) !== false) {
于 2011-07-01T06:27:22.430 回答
1

将其更改为

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

查看 strpos 的工作原理

于 2011-07-01T06:28:00.257 回答
1

这是问题所在:

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

如果在索引 0 处找到字符串,则计算结果为 0,这会导致 IF 语句为假,因此请使用

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

于 2011-07-01T06:28:56.323 回答
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”关键字,并进行适当的检查。

希望能帮助到你。

于 2011-07-01T06:27:54.267 回答