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

0

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

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

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

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

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


        а если с массивами работа, то лучше через array implode.
        Ответить
        • было бы здорово сравнить различные способы (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
        Ответить
        • Да, я тоже через массивы делаю сборку всех подобных вещей. Удобно.
          Ответить
  • На русском сайте пиши по-русски. На собачьем языке пусть варвары пишут.
    Ответить
  • http_build_query появился в пятой ветке пхп, до него были подобные высеры
    в данном контексте скорее всего гк остален для совместимости с предыдущими версиями.
    кто сравнивает нативные функции с велосипедами больной на голову, все нативные функции выполняются в разы быстрее
    Ответить
    • я думал про это, специально зашел на php.net посмотреть, когда была введена http_build_query (PHP5). Дело в том, что в классе, помимо этой функции есть фичи чисто php5 (например, __construct метод). Скорее всего, автор кода просто по привычке копипастил этот метод
      Ответить

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

Переведи на "PHP", guest!

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


    8