Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Аргумент цикла while. Помогите разобраться.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Dazar
Отправлено: 09 Марта, 2012 - 19:20:50
Post Id


Частый гость


Покинул форум
Сообщений всего: 139
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




В описании этого цикла написано:
while (логическое_выражение)...
Когда в аргументе логическое выражение - всё понятно. Например
while($x<10) читается как пока икс меньше 10.. Всё просто.
Но когда пишут while($x) - это воодит меня в ступор. Например на одном сайте описыватеся оператор strtok():
PHP:
скопировать код в буфер обмена
  1. <?
  2.    $str ="I am very glad to see%you% adhahjasdad";$tok = strtok($str, " ");
  3.    while($tok)
  4.    {
  5.      echo ($tok);
  6.      echo (" ");
  7.      $tok = strtok(" %");
  8.    };
  9.    // выведет: "I" "am" "very" "glad" "to" "see" "you":
  10. ?>


Люди добрые, как мне понимать строчку while($tok)??
 
 Top
EuGen Администратор
Отправлено: 09 Марта, 2012 - 19:25:08
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




По поводу while($x) - ничего сложного. Любое выражение, стоящее в скобках while, рассматривается как логическое (булево), и, значит, если оно истинно, цикл продолжается. Просто для Вас более понятно то, что $x<10 есть логическое выражение.
http://www.php.su/functions/?strtok
Цитата:
Заметьте, что исходная строка передается только при первом вызове этой функции. Последующим вызовам передаются только разделители, так как эта функция сохраняет исходную строку и запоминает позицию в этой строке между вызовами


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Dazar
Отправлено: 09 Марта, 2012 - 22:04:19
Post Id


Частый гость


Покинул форум
Сообщений всего: 139
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Всё равно что-то не понимаю.. Как так посмотреть на переменную, чтобы она стала логическим выражением?
 
 Top
OrmaJever Модератор
Отправлено: 09 Марта, 2012 - 22:07:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




0(ноль), '' (пустая строка), array()(пустой масив), null и сам false это ложь, всё остальное true.
Хотя мог что-то и забыть Улыбка


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
LIME
Отправлено: 09 Марта, 2012 - 22:07:52
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




например цифра 0, пустая строка "" или null в логическом контексте считаются как false
все строки не 0вой длины и цифры не 0 считаются труе
(Добавление)
преобразование в булев тип
 
 Top
Dazar
Отправлено: 10 Марта, 2012 - 08:18:48
Post Id


Частый гость


Покинул форум
Сообщений всего: 139
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Вроде понял. while($x) будет работать, пока в теле цикла $x не измениться на false, 0 и т.д.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB