代码之家  ›  专栏  ›  技术社区  ›  Robin Barnes

从数组构建查询字符串的PHP函数

php
  •  183
  • Robin Barnes  · 技术社区  · 17 年前

    我正在寻找PHP函数的名称,以便从键值对数组构建查询字符串。请注意,我正在寻找 内置PHP 功能来实现这一点,而不是自制程序(谷歌搜索似乎只会返回这些)。有一个,我只是不记得它的名字,也找不到它在php.net上。IIRC的名字并不那么直观。

    5 回复  |  直到 13 年前
        1
  •  330
  •   Ry- Vincenzo Alcamo    14 年前

    您正在寻找 http_build_query() .

        2
  •  22
  •   0x6A75616E    13 年前

    下面是一个简单的php4友好实现:

    /**
    * Builds an http query string.
    * @param array $query  // of key value pairs to be used in the query
    * @return string       // http query string.
    **/
    function build_http_query( $query ){
    
        $query_array = array();
    
        foreach( $query as $key => $key_value ){
    
            $query_array[] = urlencode( $key ) . '=' . urlencode( $key_value );
    
        }
    
        return implode( '&', $query_array );
    
    }
    
        3
  •  2
  •   vp_arth    11 年前

    就像添加到 @thatjuan 的答案。
    更兼容的PHP4版本:

    if (!function_exists('http_build_query')) {
        if (!defined('PHP_QUERY_RFC1738')) {
            define('PHP_QUERY_RFC1738', 1);
        }
        if (!defined('PHP_QUERY_RFC3986')) {
            define('PHP_QUERY_RFC3986', 2);
        }
        function http_build_query($query_data, $numeric_prefix = '', $arg_separator = '&', $enc_type = PHP_QUERY_RFC1738)
        {
            $data = array();
            foreach ($query_data as $key => $value) {
                if (is_numeric($key)) {
                    $key = $numeric_prefix . $key;
                }
                if (is_scalar($value)) {
                    $k = $enc_type == PHP_QUERY_RFC3986 ? urlencode($key) : rawurlencode($key);
                    $v = $enc_type == PHP_QUERY_RFC3986 ? urlencode($value) : rawurlencode($value);
                    $data[] = "$k=$v";
                } else {
                    foreach ($value as $sub_k => $val) {
                        $k = "$key[$sub_k]";
                        $k = $enc_type == PHP_QUERY_RFC3986 ? urlencode($k) : rawurlencode($k);
                        $v = $enc_type == PHP_QUERY_RFC3986 ? urlencode($val) : rawurlencode($val);
                        $data[] = "$k=$v";
                    }
                }
            }
            return implode($arg_separator, $data);
        }
    }
    
        4
  •  -3
  •   Ali    17 年前

    没必要那么做

    GuzzleClient($config)->Request($method , $uri , [ 'json'=>[...] , 'query'=> $your_query_array ])
    

    查询 将填写您的uri查询

    2023年:D

    推荐文章