1. PHP / Говнокод #10481

    +78

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    public function monthToString($month)
    {	
    	$months = array('никогдарь', 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
    	if(is_numeric($month))
    	{
    		$month = ltrim($month, "0");
    		$month = $months[$month];
    	}
    	return $month;
    }

    Стажер нашел весьма нетривиальный способ получить месяц текстом =D

    Запостил: s1Paris, 31 Мая 2012

    Комментарии (49) RSS

    • Отправляем Нулябрь на пенсию. :)
      Ответить
    • Кстати, защиты от выдачи на выход 'никогдаря' - нет. Если бы я делал, я бы в этой же функции проверил, или вызвал проверку из этой.
      Ответить
      • if ($month == "никогдарь") die("никогда не говори никогда");

        Так? :)
        Ответить
      • Что характерно... Никогдарь никогда не получится.
        если внезапно прийдет ноль получим Undefined index: [ничего] in [бла-бла-бла] ltrim($month, "0"); - Божественное решение =D
        А вот если на вход прийдет не число, а скажем: "Джигурдарь", то на выходе "Джигурдарь" и получим.
        Ответить
        • О да, Джигурдабрь, это теперь мой любимый месяц!
          Ответить
        • Точно, не подумал про трим. +
          Ответить
        • показать все, что скрытоПочему это мы его получим?
          Будет indefined index Джигурдарь.
          Ответить
          • Он не is_numeric. К.О.
            Ответить
            • Ах да, проверка.
              Ответить
            • Кто не is_numeric? Строка состоящая из произвольного числа нулей - is_numeric.
              Ответить
              • Речь шла про Джигурдарь ;)
                Ответить
                • Ну дак а я-то отвечал про
                  >если внезапно прийдет ноль получим Undefined index: [ничего] in [бла-бла-бла] ltrim($month, "0"); - Божественное решение =D
                  С Джигурдарём всё очевидно. А про Трим я сказал, что не углядел. Вначале думал, что нужно отфильтровать выход на наличие никогдабря, а его оказывается никогда не выдаст, т.к. его индекс - 0, он оттримится.
                  Ответить
    • А что мешает указать начальный индекс единицу? Или я что-то не понимаю?
      Ответить
      • показать все, что скрытоТы уебан.
        Ответить
      • интересно, как это сделать в данной реализации?
        Ответить
        • Вот так например
          <?php
          header( 'Content-Type: text/html; charset=utf-8;' );
          
          function monthToString( $month ) {
          	$months = array( 1 => 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь' );
          	return isset( $months[(int)$month] ) ? $months[(int)$month] : 'Нулябрь-Никогдарь-Джигурдарь';
          }
          
          echo monthToString( 01 ) . '<br />';
          echo monthToString( 2 ) . '<br />';
          echo monthToString( "3" ) . '<br />';
          echo monthToString( '4' ) . '<br />';
          echo monthToString( '05' ) . '<br />';
          echo monthToString( 6 ) . '<br />';
          echo monthToString( 7 ) . '<br />';
          echo monthToString( 8 ) . '<br />';
          echo monthToString( 9 ) . '<br />';
          echo monthToString( 10 ) . '<br />';
          echo monthToString( 11 ) . '<br />';
          echo monthToString( 12 ) . '<br />';
          echo monthToString( 0 ) . '<br />';
          echo monthToString( 13 ) . '<br />';
          Ответить
        • Вот так
          $months = array(1 => 'никогдарь', 'январь', ...
          Дальше всё пойдёт как надо. Никогдарь не нужен. Дельный совет.
          Ответить
    • показать все, что скрытоКстати, всем поставил по минусу, СУКИ!!!
      Ответить
    • > is_numeric
      >ltrim
      Мсье знает толк в извращениях.
      Да и языки со слабой типизацией - зло, если на вход "библиотечной" функции можно запросто засунуть не ожидаемое число, а строку, число в строке и всё подобное.
      Ответить
    • А я всегда думал, что в ПХП, в случае
      $arr = array(1 => 'numberKey', '1' => 'stringKey');
      получится массив с двумя различными элементами.
      Ответить
      • Официальная дока гласит, что в индексах массивов строки, которые содержат в себе валидные интеджеры будут преобразованы в интеджеры. Впрочем, "01" это не касается.
        Кстати, игрался когда-то с разными типами в качестве ключей... float если скормить - отбрасывает дробную часть и становится интом. bool становится интом. null становится "" (пустая строка). Массивы/объекты/ресурсы выдают ворнинг.
        Ответить
        • показать все, что скрытоОфициальная дока похапе - грязь, об которую мараться не каждый станет...
          Ответить
        • С преобразованиями в пхп конечно перемудрили:
          "37912793791273981273"=="37912793791273981373"
          "j37912793791273981273"!="j37912793791273981373"

          P.S. Я знаю, что строки нужно сравнивать на ===
          Ответить
          • пиздец, как это?
            Ответить
            • Жесть. 8-) Но если хоть одно из этих нижних запихать в переменную, и сравнивать с переменной - сравнивает правильно... *сломал кресло, продолжил ржать на полу под аккомпанемент коллег*
              Ответить
              • Ржете всем отделом?
                Ответить
              • С переменными тоже багует.
                $a = "37912793791273981273";
                $b = "37912793791273981373";
                print ($a == $b) ? "Equal!" : "Not equal!";

                Хотя это не баг, это фича.
                Ответить
            • > пиздец, как это?
              Преобразование в число (по возможности).
              Ответить
              • так тут же явно видно что невозможно
                Ответить
                • Видит циферки, и надеется, что влезет... умом пхп не понять, это точно.
                  Ответить
              • Причём, врать не буду, кажется, оно пытается преобразовать в плавающее обычной точности и из-за этого могут сравниться строки с почти одинаковыми числами как одинаковые.
                С другой стороны, === спасёт всех. Кого не спасёт - придумают ====.
                Ответить
          • JavaScript тоже отжигает
            http://tinyurl.com/8xm5vd5
            Вот за это я не люблю языки с нестрогой типизацией
            Ответить
          • Ой, йопт.
            Ответить

    Добавить комментарий