Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запуск и остановка цикла
 
 автор: iriter   (28.08.2008 в 00:36)   письмо автору
 
 

Вот простая задача:
for ( $i = 0; $i <= ЧИСЛО; $i++ )
{
 if ( $Array[$i] == 'ЗНАК' ) break;
}


Этим несложным кодом я останавливаю работу цикла, когда происходит совпадение и, например, что-нибудь вывожу:
echo $Array[$i];


Но вот другая задача! Как сделать так, чтобы некоторое действие начало выполняться лишь после того, как произойдёт равенство $Array[$i] == 'ЗНАК'. Т.е. чтобы до того, как этот ЗНАК не появится ничего не происходило, а дальше, до нового сопадения $Array[$i] == 'ЗНАК_ДРУГОЙ' - выполнялся код.

  Ответить  
 
 автор: Mookapek   (28.08.2008 в 00:59)   письмо автору
 
   для: iriter   (28.08.2008 в 00:36)
 


$flag = 1;
for ( $i = 0; $i <= ЧИСЛО; $i++ )
{
 if ( $Array[$i] == 'ЗНАК'  and !isset($flag)) break;
 if ( $Array[$i] == 'ЗНАК'  and isset($flag)) 
 {
  unset($flag);
  // выполняется нужный код
 }
}


Если я правильно понял, что требуется, то так, как вариант.

  Ответить  
 
 автор: iriter   (28.08.2008 в 01:03)   письмо автору
 
   для: Mookapek   (28.08.2008 в 00:59)
 

Спасибо большое! Сегодня глаза закрываются. Завтра обязательно попробую.

  Ответить  
 
 автор: BinLaden   (28.08.2008 в 01:33)   письмо автору
 
   для: Mookapek   (28.08.2008 в 00:59)
 

Mookapek, а почему после нужного кода не поставилть сразу break, а делать вот такие выкрутасы с $flag?

  Ответить  
 
 автор: Mookapek   (28.08.2008 в 01:44)   письмо автору
 
   для: BinLaden   (28.08.2008 в 01:33)
 

iriter сказал, что цикл должен работать до нового совпадения.

  Ответить  
 
 автор: BinLaden   (28.08.2008 в 02:28)   письмо автору
 
   для: Mookapek   (28.08.2008 в 01:44)
 

Человеку надо просто про switch() рассказать.

  Ответить  
 
 автор: Trianon   (28.08.2008 в 11:44)   письмо автору
 
   для: BinLaden   (28.08.2008 в 02:28)
 

человеку надо про конечный автомат рассказать, да разве ж он станет слушать...

  Ответить  
 
 автор: iriter   (28.08.2008 в 11:50)   письмо автору
 
   для: Mookapek   (28.08.2008 в 00:59)
 

Mookapek, спасибо за идею! ;o)

  Ответить  
 
 автор: mihdan   (28.08.2008 в 01:10)   письмо автору
 
   для: iriter   (28.08.2008 в 00:36)
 

break не пробовали?

  Ответить  
 
 автор: iriter   (28.08.2008 в 11:36)   письмо автору
 
   для: mihdan   (28.08.2008 в 01:10)
 

В моём коде break; есть.

  Ответить  
 
 автор: iriter   (28.08.2008 в 11:49)   письмо автору
 
   для: iriter   (28.08.2008 в 00:36)
 

Получилось!
Немного изменил код в начале мне приведённый!

Файл "file.dat":
kfdkgjkdfjgk
ldfkjhljdfl  dh
dfhdfhdsf dfjsfh dfh dfh
dfshdfhdf dhfdfh
dfhdfhd hdf hdfh dfh
()hfdhdhhdfhdfh dfh dfh
54545
584484
848484
gfhfh()
fghd hfdh fg
h fdh dghfg f hf
hfghfjhfghfghfh


Код "index.php":
$Array = file ( './file.dat' );
$Count = count ( $Array );

/* Необходимая задача: вывод в данном примере должен быть только строк:
54545
584484
848484 */
$flag = false;
for ( $i = 0; $i <= $Count; $i++ )
{
    
    if ( trim ( $Array[$i] ) == '()hfdhdhhdfhdfh dfh dfh' ) { $flag = true; continue; }
    if ( trim ( $Array[$i] ) == 'gfhfh()' ) { $flag = false; break; }
    
    if ( $flag )
    {
        echo $Array[$i].'<br/>';
    }
    
}
/* End; */


Вывел на экран:
54545
584484
848484


Всем спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования