PHP: оператор IF работает самостоятельно, но не внутри цикла WHILE - PullRequest
1 голос
/ 25 апреля 2011

Проблема:

Допустим, у меня есть ключевое слово $ = предложение, введенное в поле поиска, такое как "большие белые поля"

Что мне нужно сделать, это разбить это на отдельныхслова, а затем проверьте каждое слово, чтобы убедиться, что * не появляется внутри первых 3 букв.(Итак, sen * будет в порядке, но se * не будет в порядке).Если * появляется в первых 3 буквах любого отдельного слова, то процесс "if ($ keyword) ..." необходимо завершить.

if ($keyword)  {


            $token = strtok($keyword, " ");
                while ($token != false) {
                    echo $token;
                        if (stripos($token,"*") < 3 ) {
                        return;
                        }
                    $token = strtok(" ");
                    }

... код продолжается ...

Как вы можете видеть, я каждый раз повторяю, чтобы увидеть, как он обрабатывает.

Если я избавлюсь от кода 'if', то он выведет 'largewhiteboxes' и продолжит работу, как и ожидалось.

Если я оставлю код «если» как есть, выводится только «большой», и процедура завершается - даже если условие не выполнено!

Если я запускаю этот «если»сам по себе, вне цикла WHILE, он работает просто отлично, отвечая true на * в первых 3 позициях и false на все остальное ...

Что я могу сделать не так с этим ??

Ответы [ 2 ]

2 голосов
/ 25 апреля 2011

В документации stripos есть гигантское красное предупреждение , на которое следует обратить внимание.

Другими словами, вам нужно проверить, является ли возвращаемое значение !== false, прежде чем проверять, является ли оно < 3.

Кроме того, почему вы беспокоитесь о strtok, когда explode(',', $keyword) доступен?

0 голосов
/ 25 апреля 2011

Этот вариант, кажется, работает.

$keyword = "large white boxes";

$token = strtok($keyword, " ");

while ($token !== false) {
    echo $token;
    $pos = stripos($token, "*");
    if ($pos < 3 && $pos !== false) {
        return;
    }
    $token = strtok(" ");
}
...