Задача Foreach strpos.Найти строку в другой строке - PullRequest
2 голосов
/ 01 июля 2011

Я пытаюсь заставить этот скрипт работать.

Идея состоит в том, что если строка ввода ($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 ]

5 голосов
/ 01 июля 2011

Если функция strpos не может найти строку, она возвращает false. Также обратите внимание, что если строка поиска находится в самом начале, возвращается 0.

Изменение

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

до

if (strpos($query, $trigger) !== false) {
1 голос
/ 01 июля 2011

здесь проблема:

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

Это значение равно 0, если строка найдена в индексе 0, что приводит к ложному выражению оператора IF, поэтому используйте

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

1 голос
/ 01 июля 2011

измените это на

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

оформить заказ как strpos работает

0 голосов
/ 01 июля 2011
<?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" вместе с соответствующей проверкой.

Надеюсь, это поможет.

...