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

    +164

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    /**
     * Constructs a URL encoded query string from an array of key/value pairs
     *
     * @access protected
     * @since 2.0
     * @param array $array query string key/value pairs
     * @return string
     */
    protected function _glue( $array )
    {
        $query_string = '';
        foreach( $array as $key => $val ) :
            $query_string .= $key . '=' . rawurlencode( $val ) . '&';
        endforeach;
        
        return '?' . substr( $query_string, 0, strlen( $query_string )-1 );
    }

    http://code.google.com/p/php-twitter/
    опять велосипеды

    Запостил: striker, 25 Мая 2010

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

    • лисапед заморский, хороший.

      это ужасно.. я понимаю, не знать про то, что substr(str, 0, strlen(str) - 1) === substr(str, 0, -1), но хотяб почитать маны о наличие функций .. в общем, страшне.
      Ответить
      • rtrim( $query_string, '&') достаточно.
        Ответить
        • тут я имел в виду не это, но допустим, что это ответ на мой комментарий ниже. [:

          да, это хороший вариант, но мне он по красоте нравится меньше.
          Ответить
    • я так тоже писал. Только вот нахера клеить амперсанд каждый раз, а потом его обрезать?
      Ответить
      • а как еще? задача сделать строку без последнего амперсанда. странная задача, правда.
        а вообще, есть отличная функция http_build_query
        Ответить
        • если внути for'a..
          for($i = 0, $h = 100500; $i < $h;)
          {
           $string .= 'somestr' . (++$i == $h ? '' : '&');
          }


          а если с массивами работа, то лучше через array implode.
          Ответить
          • http_build_query всё равно лучше =)
            Ответить
          • было бы здорово сравнить различные способы (substr, твой способ и implode) по времени выполнения и пожираемой памяти. Я понимаю, что в пхп так делать не модно, просто интересно. я думаю, substr($string, 0, -1) зарулит. Ваши ставки, господа
            Ответить
            • имплодовский должен быть самым последним.
              а вот уже substr, rtrim и прямом вводе разделителя - тут всё зависит от изначального количества элементов. как по мне, при маленьком выигрывает последний способ, а при больших же - substr и rtrim
              Ответить
            • Разница невелика. 1M итераций, 30 элементов в массиве
              Govno 36s memory_peak_usage: 662168
              Implode 38s memory_peak_usage: 668176
              http_build_query 9s memory_peak_usage: 656856
              Ответить
        • protected function _glue($array){
              $result = array();
              foreach($array as $key => $val)  $result[] = $key."=".rawurlencode($val);
          
              return "?".implode("&", $result);
          }

          PS: но лучше пользовать http_build_query
          Ответить
          • Да, я тоже через массивы делаю сборку всех подобных вещей. Удобно.
            Ответить
    • Зато как код документирован!
      Ответить
    • показать все, что скрытоНа русском сайте пиши по-русски. На собачьем языке пусть варвары пишут.
      Ответить
      • Это ты о чем?
        Ответить
      • незнающий английского недопрограммист -- явно PHPшник или 1Совец
        Ответить
    • http_build_query появился в пятой ветке пхп, до него были подобные высеры
      в данном контексте скорее всего гк остален для совместимости с предыдущими версиями.
      кто сравнивает нативные функции с велосипедами больной на голову, все нативные функции выполняются в разы быстрее
      Ответить
      • я думал про это, специально зашел на php.net посмотреть, когда была введена http_build_query (PHP5). Дело в том, что в классе, помимо этой функции есть фичи чисто php5 (например, __construct метод). Скорее всего, автор кода просто по привычке копипастил этот метод
        Ответить
    • мурло верноевское, однозначно.
      Ответить

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