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
Форумы портала PHP.SU » » Вопросы новичков » Синтаксис switch

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

1. hatsub - 27 Июля, 2011 - 09:27:13 - перейти к сообщению
Узнал, что switch работает быстрее чем if, вот решил переделать.
Вопрос про синтаксис: мне нужно в case проверять не одно значение, а несколько, тобишь диапазон чисел:

PHP:
скопировать код в буфер обмена
  1.  
  2. switch (mysql_num_rows($sql)) {
  3.  
  4. case 1,2,3,4,5,6,7,8,9,10: // дапазон чисел
  5. операторы;
  6. break;
  7.  
  8. default: операторы break;
  9. }
  10.  
  11.  


Пробовал писать через "..", через "," и писать массив. Вообще у switch есть возможность писать несколько значений?
2. White - 27 Июля, 2011 - 10:14:10 - перейти к сообщению
hatsub откуда такие данные?
3. Ejas Tower - 27 Июля, 2011 - 10:36:35 - перейти к сообщению
Вы имеете ввиду следующее?

PHP:
скопировать код в буфер обмена
  1.  
  2. switch (mysql_num_rows($sql)) {
  3.  
  4.      case 1:
  5.           оператор1;
  6.      break;
  7.      case 2:
  8.           оператор2;
  9.      break;
  10.  
  11.      default:
  12.           оператор3;
  13.      break;
  14. }
  15.  
4. Мелкий - 27 Июля, 2011 - 10:45:28 - перейти к сообщению
hatsub пишет:
Узнал, что switch работает быстрее чем if, вот решил переделать.

Наоборот, switch нагляднее для множества сравнений, но компилируется в бОльший код.

Реализация switch в php позволяет использовать вычисляемые выражения в условиях, т.е. сделать можно так:
PHP:
скопировать код в буфер обмена
  1. $num = mysql_num_rows($sql);
  2. switch (true) {
  3.  
  4. case $num<5: // дапазон чисел
  5. операторы;
  6. break;
  7. case $num<10: // дапазон чисел
  8. операторы;
  9. break;
  10. case $num<15: // дапазон чисел
  11. операторы;
  12. break;
  13. default: операторы break;
  14. }
5. hatsub - 27 Июля, 2011 - 11:12:10 - перейти к сообщению
Мелкий, спасибо!

А все-таки что быстрее работает if или switch
6. OrmaJever - 27 Июля, 2011 - 11:35:44 - перейти к сообщению
if else
7. LIME - 27 Июля, 2011 - 11:37:36 - перейти к сообщению
в случае если надо перечислить варианты а они не в диапазоне можно так
PHP:
скопировать код в буфер обмена
  1. switch (mysql_num_rows($sql)) {
  2.  
  3. case 1:
  4. case 2:
  5. case 3:
  6. case 4:
  7. операторы;
  8. break;
  9.  
  10. default: операторы break;
  11. }
  12.  
8. White - 27 Июля, 2011 - 12:01:21 - перейти к сообщению
быстрее работают наиболее близкие к ассемблеру операторы ветвления if, goto. Все остальные (else, for, while, switch...) - их производные, и могут быть заменены ими, что тем не менее не сделает код более читаемым и понятным
9. Champion - 27 Июля, 2011 - 12:57:17 - перейти к сообщению
hatsub пишет:
case 1,2,3,4,5,6,7,8,9,10:

PHP:
скопировать код в буфер обмена
  1. case 1:
  2. case 2:
  3. case 3:
  4. ...
  5. case 10:
  6. действия для 1,2,3..10
  7. break;
  8. case 78:
  9. действия для 78
10. jna - 23 Сентября, 2011 - 05:50:57 - перейти к сообщению
Можно так
PHP:
скопировать код в буфер обмена
  1. switch(true)
  2.     {
  3.         case in_array($selnode, Array(1,2,3,4,5,6,7,8,9,10,11,13)) :
  4.             $out = 'До 13';
  5.         break;
  6.         case in_array($selnode, Array(15,16,17,18,19,20,21,22,23,24,25,26,27)):
  7.             $out = 'После 15';
  8.         break;        
  9.     }
11. EuGen - 23 Сентября, 2011 - 09:48:10 - перейти к сообщению
http://www.phpbench[dot]com/
Цитата:
Conclusion:

Using a switch/case or if/elseif is almost the same

То есть время если и отличается, то на крайне малое отклонение.

 

Powered by ExBB FM 1.0 RC1