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
Форумы портала PHP.SU :: Версия для печати :: Switch-case
Форумы портала PHP.SU » PHP » Программирование на PHP » Switch-case

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

1. Staind - 29 Ноября, 2007 - 18:50:19 - перейти к сообщению
Задаю условия, и почему-то, он не срабатывает на нужных. Допустим у меня есть переменная $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.
2. evgenijj - 29 Ноября, 2007 - 19:35:30 - перейти к сообщению
Цитата:

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
3. T-Mon - 29 Ноября, 2007 - 20:08:15 - перейти к сообщению
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";}
4. Staind - 29 Ноября, 2007 - 20:37:14 - перейти к сообщению
2evgenijj, понял, спасибо, думал что логически сравнивать можно.
2T-Mon, спасибо за код, правил.

 

Powered by ExBB FM 1.0 RC1