"PHP" / Говнокод #13798 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 develx0, (Updated )

Комментарии (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 процесс положит. А если повезет и сервак криво сконфигурирован - то и сервак посвопит несколько минут. В добавок, все это теперь оформлено в удобную переиспользуемую функцию, которую можно вызывать откуда угодно.
      Ответить
  • Никак не припомню, но тут подобное бывало-с, и не раз.
    Ответить
    • '_'.join("1 2 3 4".split())
      наркоманы же. На руби порядок наоборот:
      "1 2 3 4".split().join('_')
      Ответить
      • Синтаксически это логичнее, да. Но почему список абстрактных элементов должен иметь join(), склеивающий строки?
        Какой это имеет смысл:
        [1, 0.5, None].join('_')

        ?

        Конечно можно для всех элементов применить __str__()...
        Ответить
        • Да, ну str.join в Python жрет любой итерируемый объект, а вот не всякий такой объект содержит метод join()
          Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8