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

    +163

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    ...
    $str = preg_replace ( array_keys ( $new ), array_values ( $new ), $str );
    $str = trim ( $str );
    $str = str_replace ( "       ", "_", $str );
    $str = str_replace ( "      ", "_", $str );
    $str = str_replace ( "     ", "_", $str );
    $str = str_replace ( "    ", "_", $str );
    $str = str_replace ( "   ", "_", $str );
    $str = str_replace ( "  ", "_", $str );
    $str = str_replace ( " ", "_", $str );

    Запостил: develx0, 16 Сентября 2013

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

    • Разве этого достаточно?
      $prefix = "";
      while (true) {
          $prefix += " ";
          $str = str_replace ( $prefix, "_", $str );
      }
      Ответить
      • И этого достаточно чтобы стать следующим постом на этом сайте.
        Одна строка
        если уж совсем сохранить функционал:
        $str = preg_replace('/ {1,7}/', '_', $str);
        или если упростить:
        $str = preg_replace('/ +/', '_', $str);
        Ответить
        • Так то был зелёный.

          Хотя, автор кода шёл от 7 до 1, а Vladiator - от 1 до бесконечности, это немного в другую сторону.
          Ответить
          • ну так если бы автор шел от 1 до семи пробелы бы остались, в этой части он прав)
            Ответить
            • > если бы автор шел от 1 до семи пробелы бы остались
              пробелов бы не осталось, но было бы много _________________
              Именно в этой части Vladiator неправ, поскольку на первой же итерации пробелы бы кончились :)

              Вот если б он пошёл от бесконечной строки с пробелами...
              Ответить
              • а, ну да, все пробелы бы в первый проход заменились. просто автор не познал регулярки, я когда то тоже таким занимался(
                Ответить
                • здесь выше по коду автор использовал регулярки
                  $str = preg_replace ( array_keys ( $new ), array_values ( $new ), $str );
                  а с пробелами что-то лоханулся
                  Ответить
              • Фикс:
                $spaces = "";
                while (true) {
                    $spaces += " ";
                }
                while ($spaces) {
                    $str = str_replace ( $spaces, "_", $str );
                    $spaces = substr($spaces, 0, -1);
                }
                Ответить
                • Чем дальше, тем веселей %-)
                  Ответить
                • Если я ничего не напутал,
                  function repl ( $str, $spaces = "", $down = FALSE) {
                    return $down ?
                      strlen($spaces) > 0 ? repl (str_replace ( $spaces, "_", $str ), substr($spaces, 1), $down) : $str
                    : is_infinite(strlen($spaces)) ? repl($str, $spaces, TRUE) : repl($str, $spaces + ' ');
                  }
                  Ответить
                  • Таки напутал. Надо было точку использовать и немного скобок.
                    function repl ( $str, $spaces = "", $down = FALSE) {
                      return $down ?
                        (strlen($spaces) > 0 ? repl (str_replace ( $spaces, "_", $str ), substr($spaces, 1), $down) : $str)
                      : (is_infinite(strlen($spaces)) ? repl($str, $spaces, TRUE) : repl($str, $spaces . ' '));
                    }

                    Пример для малых чисел: http://ideone.com/1KaaRe
                    С вынесением алгоритма проверки достаточности в аргумент: http://ideone.com/Z3VzJz
                    Ответить
        • Тут же не занимаются улучшением кода.
          Ответить
          • Если соединить говнокод и рефакторинг, получится говнофакторинг.
            Ответить
      • Однозначно нет. С рекурсией:
        function TheBestReplaceEver($str, $prefix = " ")
        {
        	$str = str_replace ( $prefix, "_", $str );
        	$str = TheBestReplaceEver( $str, $prefix." " );
        	return $str;
        }
        TheBestReplaceEver( $str );

        Код не только никогда не завершится, но благодяря использованию рекурсии он так же и php процесс положит. А если повезет и сервак криво сконфигурирован - то и сервак посвопит несколько минут. В добавок, все это теперь оформлено в удобную переиспользуемую функцию, которую можно вызывать откуда угодно.
        Ответить
    • Никак не припомню, но тут подобное бывало-с, и не раз.
      Ответить
    • python:

      >>> '_'.join("1 2 3 4".split())
      '1_2_3_4'
      Ответить
      • perl: s/\s+/_/g
        Ответить
      • '_'.join("1 2 3 4".split())
        наркоманы же. На руби порядок наоборот:
        "1 2 3 4".split().join('_')
        Ответить
        • Синтаксически это логичнее, да. Но почему список абстрактных элементов должен иметь join(), склеивающий строки?
          Какой это имеет смысл:
          [1, 0.5, None].join('_')

          ?

          Конечно можно для всех элементов применить __str__()...
          Ответить
          • Да, ну str.join в Python жрет любой итерируемый объект, а вот не всякий такой объект содержит метод join()
            Ответить
    • показать все, что скрытоИщу партнёра для секса. Есть своя квартира. Анал, орал, группа. Пиши мне на [email protected]
      Ответить

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