За последние 24 часа нас посетили 35535 программистов и 1819 роботов. Сейчас ищут 807 программистов ...

Сравнение

Тема в разделе "Прочие вопросы по PHP", создана пользователем KING_PHP, 25 май 2015.

  1. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    Правильно ли?
    Код (PHP):
    1.      $type = $row['type'];
    2.      $perm = 'perm '
    3.      $permgroup = 'permgroup'
    4.      $rown = 'rown'
    5.      $rmem = 'rmem'
    6.      $money = 'money'
    7.      $item = 'item'
    8.         if (strcmp($type, $perm) == 0) {
    9.         $type = 'Права';
    10.         } else {
    11.                 if (strcmp($type, $permgroup) == 0) {
    12.                 $type = 'Статус';
    13.                 } else {
    14.                         if (strcmp($type, $rgown) == 0) {
    15.                         $type = 'Право владельца';
    16.                         } else {
    17.                                 if (strcmp($type, $rgmem) == 0) {
    18.                                 $type = 'Право участника';
    19.                                 } else {
    20.                                         if (strcmp($type, $money) == 0) {
    21.                                         $type = 'Деньги';
    22.                                         } else {
    23.                                             if (strcmp($type, $item) == 0) {
    24.                                                 $type = 'Предмет';
    25.                                                 } else { $type = "Тип"};};};};};}; 
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Мне нравиться, только code=php используй
     
  3. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    а меня пугает. Что не делаю, ошибка синтаксиса
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Угу, точки с запятыми потерял вот...
    Добавлено спустя 29 секунд:
    И да, почитай про switch.
     
  5. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    Код (PHP):
    1. $perm = 'perm';
    2.      $permgroup = 'permgroup';
    3.      $rown = 'rown';
    4.      $rmem = 'rmem';
    5.      $money = 'money';
    6.      $item = 'item'; 
    - Испивал сразу..

    Операторы выбора/ Переключатель switch
    Переключатель switch является наиболее удобным средством для организации мультиветвления. Синтаксис переключателя таков:
    Код (PHP):
    1. switch(expression) // переключающее выражение
    2. {
    3.    case value1: // константное выражение 1
    4.       statements; // блок операторов
    5.    break;
    6.    case value2: // константное выражение 2
    7.       statements;
    8.    break;
    9.    default:         
    10.       statements;
    11. }
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Спасибо кэп :)
    Не нам покажи, что это, а для себя его открой и подумай, зачем я тебе о нем сказал.
    Посмотри на свой код и подумай о свитче. Потом снова на нагромождение своих elseif-ов и снова на свитчи. И да, у тебя там в каждом elseif-е производится вызов функции, который можно в общем-то сделать всего один раз.
     
  7. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    Если честно я новичок в php, для меня switch - Это будущее. :D
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Надо не PHP изучать, раз уж совсем новичок, а общие принципы программирования и алгоритмизации. switch - это не фича пхп, это конструкция, которой, пожалуй, столько же лет, сколько и IF-у. И есть он, как и if, в 99% языков программирования. В той или иной синтаксической форме, но есть.

    Так что может сначала выучить основы абстрактные, а потом уже в какую-то специализацию лезть, м?
     
  9. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    Код (Text):
    1. Id  Игрок  Тип  Предмет  Amount  Extra   Delete
    2. 1   ZOMBI   Права  item    1   1   Удалить!
    3. 2   ZOMBI   Статус    item    1   1   Удалить!
    4. 3   ZOMBI   Деньги    item    1   1   Удалить!
    5. 7356    ZOMBI   Предмет  item    1   1   Удалить!
    6. 7357    ZOMBI   Право владельца   item    1   1   Удалить!
    7. 7359    ZOMBI   Право участника   item    1   1   Удалить!
    И так работает :D
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Чтоб знал, это девиз быдлокодеров.
     
  11. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    Да и окей :D

    Добавлено спустя 2 минуты 9 секунд:
    Мне всегда нужен пример кода, его я разбираю изучаю и пишу. примеров нет :"D

    Добавлено спустя 8 минут 6 секунд:
    Так?
    Код (PHP):
    1.      <?
    2. switch($type)
    3. {
    4.     case perm:
    5.       echo ("Права");
    6.     case permgroup:
    7.       echo ("Статус");
    8.     case rgown:
    9.       echo ("Право владельца");
    10.     case rgmem:
    11.       echo ("Право участника");
    12.     case money:
    13.       echo ("Деньги");
    14.         case item:
    15.       echo ("Предмет");
    16.     break;
    17.     default:         
    18.       echo ("Тип");
    19. } 
    20. ?>
    Добавлено спустя 2 минуты 11 секунд:
    Я пример нашел :D
    Код (PHP):
    1. <form action = "http://localhost/PHP/chapt2/switch.php" method="get">
    2.     number: <input type="text" name="number"/><br>
    3.     <input type="submit"/>
    4. </form>  
    5. <?
    6. switch($number)
    7. {
    8.     case 1:
    9.       echo ("one ");
    10.     case 2: case 3:
    11.       echo ("free");
    12.     case 4: case 5:
    13.       echo ("five");
    14.     case 6: case 7:
    15.       echo ("seven");
    16.     case 8: case 9:
    17.       echo ("nine");
    18.     break;
    19.     default:         
    20.       echo ("This isn't number or number is > 9 or < 1");
    21. } 
    22. ?>
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    мне кажется с такими затупами пора тебе прописаться в блондинках
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Нет, не так, ты написал проваливающийся свитч. Это, конечно, порой нужный инструмент, но только тогда, когда его пишет тот, кто знает, чем отличается свитч с проваливающимися кейсами от каноничного свитча. Читай внимательнее документацию, е-мое.

    В твоем случае получился кривопроваливающийся избыточный свитч, вызывающие полный перебор вариантов независимо от того, что ему пришло на вход. В лучших традициях быдлокодинга, в общем. И это должно тебя настораживать.
     
  14. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    Цвет волос не имеет значение. Главное что в самой голове :D

    Добавлено спустя 2 минуты 2 секунды:
    Если этот запрос произойдет около 1000000 раз, то... ?
    Код (PHP):
    1.         if (strcmp($type, $perm) == 0) {
    2.         $type = 'Права';
    3.         } else {
    4.                 if (strcmp($type, $permgroup) == 0) {
    5.                 $type = 'Статус';
    6.                 } else {
    7.                         if (strcmp($type, $rgown) == 0) {
    8.                         $type = 'Право владельца';
    9.                         } else {
    10.                                 if (strcmp($type, $rgmem) == 0) {
    11.                                 $type = 'Право участника';
    12.                                 } else {
    13.                                         if (strcmp($type, $money) == 0) {
    14.                                         $type = 'Деньги';
    15.                                         } else {
    16.                                             if (strcmp($type, $item) == 0) {
    17.                                                 $type = 'Предмет';
    18.                                                 } else { $type = "Тип";};
    19.                         };
    20.                         };
    21.                         };
    22.                         };
    23.                         }; 
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    То он затратит до 6 раз больше времени, чем свитч.

    Грубо, там, где свитч отработает (с учетом 1кк раз) 1 секунду, эта конструкция может жеваться до 6 секунд, а то и больше.

    Плюс она менее читабельна.

    Плюс ее потом сложнее сопровождать. Шестрикратная елочка - это плохо. А если будет 20 вариантов? Будет 20кратная елочка?
     
  16. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    Всего вариантов пока столько сколько есть, но это только 1-я страница, есть еще неск на которых тоже самое надо сделать. Только там уже 5к вариантов :"D :D

    Добавлено спустя 2 минуты 8 секунд:
    Код (PHP):
    1. <script type="text/javascript">
    2. function isNotMax(e){
    3.     e = e || window.event;
    4.     var target = e.target || e.srcElement;
    5.     var code=e.keyCode?e.keyCode:(e.which?e.which:e.charCode)
    6.  
    7.     switch (code){
    8.         case 13:
    9.         case 8:
    10.         case 9:
    11.         case 46:
    12.         case 37:
    13.         case 38:
    14.         case 39:
    15.         case 40:
    16.         return true;
    17.     }
    18.     return target.value.length <= target.getAttribute('maxlength');
    19. }
    20. </script>
    21. <textarea rows="5" cols="45" maxlength="10000"
    22.     onkeypress="return isNotMax(event)">
    23. </textarea>
    24. <input type="text" rows="5" cols="45" maxlength="10000"
    25.     onkeypress="return isNotMax(event)" />
    :D

    Добавлено спустя 6 минут 13 секунд:
    Я немного внёс изменения в код
    Код (PHP):
    1.  if (strcmp($type, $perm) == 0) {
    2.         $type = 'Права';
    3.         } elseif (strcmp($type, $permgroup) == 0) {
    4.         $type = 'Статус';
    5.         } elseif (strcmp($type, $rgown) == 0) {
    6.         $type = 'Право владельца';
    7.         } elseif (strcmp($type, $rgmem) == 0) {
    8.         $type = 'Право участника';
    9.         } elseif (strcmp($type, $money) == 0) {
    10.         $type = 'Деньги';
    11.         } elseif (strcmp($type, $item) == 0) {
    12.         $type = 'Предмет';
    13.         } elseif { $type = "Тип";}; 
    Добавлено спустя 4 минуты 30 секунд:
    Верно?
    Код (PHP):
    1.  switch ($type) {
    2.     case $perm:
    3.         echo "Права";
    4.         break;
    5.     case $permgroup:
    6.         echo "Статус";
    7.         break;
    8.     case $rgown:
    9.         echo "Право владельца";
    10.         break;
    11.     case $rgmem:
    12.         echo "Право участника";
    13.         break;
    14.     case $money:
    15.         echo "Деньги";
    16.         break;
    17.      case $item:
    18.         echo "Предмет";
    19.         break;
    20.      default;
    21.     echo 'Тип';
    22.     break;
    23.  };
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Похоже на правду.
     
  18. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    И эта правда с https://php.net/manual/ru/control-structures.switch.php :D

    Добавлено спустя 6 минут 52 секунды:
    Очень круто, если бы еще в таблице выводилось было бы круче :D
    Код (Text):
    1. 4321111111111111111111111111111 ПраваСтатусДеньгиПредметПраво владельцаПраво участника
    2. Id  Игрок  Тип  Предмет  Amount  Extra   Delete
    3. 1   ZOMBI   perm    14535324    1   1   Удалить!
    4. 2   ZOMBI   permgroup   145325:4532 1   1   Удалить!
    5. 3   ZOMBI   money   1   1   1   Удалить!
    6. 7356    ZOMBI   item    1   1   1   Удалить!
    7. 7357    ZOMBI   rgown   1   1   1   Удалить!
    8. 7359    ZOMBI   rgmem   1   1   1   Удалить!