На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > Принудительный выход из цикла foreach, по условию
      Доброго времени суток! Прочитал в интернете, что есть оператор break, но он почему-то выход не осуществляет.
      Ситуация следующая. Есть файл текстовый, содержимое которого загоняется в массив. Далее по циклу проходит, проверяет, чтобы введённое значение (почтовая форма) совпадало хотя бы с одним значением из этого массива. Если совпало, тут же выходим из цикла, но у меня так не вышло. Код прилагаю:

      ExpandedWrap disabled
        $err=file("temp/err.txt");
         
        foreach($err as $val)
         
        {
         
        if ( (stripos($name_edit, $val)) || (stripos($txt_edit, $val)) )
        {
        $mess='Ссылки, имена сайтов и спецсимволы недопустимы!';
        break;
        }
         
        }
      log(2 ^ 232.582.657)-1 is prime!
        А это именно break не работает или условие в цикле ни разу не выполняется?

        Факт: По статистике, 80 процентов людей пропадают без вести при переходе от слов к делу.

          Значит, не совпало.
          Мои религиозные убеждения не позволяют мне комментировать код.
          Моё мировоззренье таково: в программе комментария ни одного!
            Цитата Dark Side @
            А это именно break не работает или условие в цикле ни разу не выполняется?

            условие как раз выполняется!
            и что интересно, когда цикл из 1 элемента, то всё работает, но тогда и break не нужен
            смысл такой, если 5-й элемент совпал, то дальше идти не надо, надо выходить из цикла, потому что если пойти дальше, то следующие могут не совпасть - и уже условие работать не будет.

            ExpandedWrap disabled
              $name_edit = 'иван';
              $txt_edit = 'вася';


            err.txt:
            вася
            коля
            петя
            Сообщение отредактировано: salieri -
            log(2 ^ 232.582.657)-1 is prime!
              Цитата salieri @
              условие как раз выполняется!

              Есть варик проверить, добавив
              $tmp_i=0; перед foreach
              $tmp_i++; перед break;
              ну и отображение $tmp_i после отработки - чисто убедиться, что больше одного раза прокрутился break; :rolleyes:
              ?
              Сообщение отредактировано: Руслан -
              нечто нейтральное, пока что.
                :popcorn:
                    Цитата AVA12 @
                    :popcorn:
                    потому что stripos( ) у тебя всегда 0 или FALSE возвращает
                    Сообщение отредактировано: K313 -
                    свободные и открытые Web-скрипты k313.net закончились...
                      Работает! Дело было в отсутствии этой строчки:
                      ExpandedWrap disabled
                        $val=trim($val);


                      из-за пробелов она не находила ничего, соответственно не совпадало
                      break ни при чём оказался!

                      Добавлено
                      Всем огромное спасибо!

                      Вывожу рабочий код:

                      ExpandedWrap disabled
                        $err=file("temp/err.txt");
                         
                        foreach($err as $val)
                         
                        {
                        $val=trim($val);
                         
                        if(stripos($name_edit, $val) !== false || stripos($txt_edit, $val) !== false)
                         
                        {
                        $mess='Ссылки, имена сайтов и спецсимволы недопустимы!';
                        break;
                        }
                         
                        }
                      log(2 ^ 232.582.657)-1 is prime!
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      [ Script Execution time: 0,0942 ]   [ 14 queries used ]   [ Generated: 23.03.17, 08:24 GMT ]