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 :: Switch-case

 PHP.SU

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


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

> Без описания
Staind
Отправлено: 29 Ноября, 2007 - 18:50:19
Post Id



Гость


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


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

[+]


Задаю условия, и почему-то, он не срабатывает на нужных. Допустим у меня есть переменная $i = 0. Пишу код:
PHP:
скопировать код в буфер обмена
  1. $i = 0;
  2. switch ($i)
  3. {
  4. case $i<=10: echo "Работает"; break;
  5. case $i>=11 and $i<20: echo "Неработает"; break;
  6. case $i==20: echo "Неработает 2"; break;
  7. }

И у меня, вместо того, чтобы вывести "Работает", выводит "Неработает". Ведь условие то правильное.\n\n(Добавление)
Все, я понял, заменить "$i<=10" на 0.
 
 Top
evgenijj
Отправлено: 29 Ноября, 2007 - 19:35:30
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




Цитата:

switch(выражение) {
case значение1: команды1; [break;]
case значение2: команды2; [break;]
. . .
case значениеN: командыN; [break;]
[default: команды_по_умолчанию; [break]]
}

Принцип работы конструкции switch-case такой:

1. Вычисляется значение выражения;
2. Просматривается набор значений. Пусть значение1 равно значению выражения, вычисленного на первом шаге. Если не указана конструкция (оператор) break, то будут выполнены команды i, i+1, i+2, ... , N. В противном случае (есть break) будет выполнена только команда с номером i.
3. Если ни одно значение из набора не совпало со значением выражения, тогда выполняется блок default, если он указан.

Обрати внимание на слово значение.

http://php.su/learnphp/cs/?sc
 
 Top
T-Mon
Отправлено: 29 Ноября, 2007 - 20:08:15
Post Id


Гость


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


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




PHP:
скопировать код в буфер обмена
  1. $i = 0;
  2.  switch(check($i))
  3.  {
  4.  case 1: echo "Работает"; break;
  5.  case 2: echo "Неработает"; break;
  6.  case 3: echo "Неработает 2"; break;
  7.  }
  8. function check($i){
  9. if($i<=10){return1;}
  10. elseif($>=11&&$i<20){return 2;}
  11. elseif($i==20){return 3;}
  12. }

Это делать глупо, но если так хочеться использовать именно switch...
А вообще:
PHP:
скопировать код в буфер обмена
  1. if($i<=10){echo "Работает";}
  2. elseif($>=11&&$i<20){echo "Неработает";}
  3. elseif($i==20){echo "Неработает 2";}
 
 Top
Staind
Отправлено: 29 Ноября, 2007 - 20:37:14
Post Id



Гость


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


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

[+]


2evgenijj, понял, спасибо, думал что логически сравнивать можно.
2T-Mon, спасибо за код, правил.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB