2008-12-30 98 views
133

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

回答

0

Implode将数组合并为你一个字符串,而是使一个SQL查询了凯/值对你”你必须编写你自己的功能。

+0

试过,但它不会工作。我试图建立一个http查询字符串,它需要数组中的键和值,implode不能这样做。 – 2008-12-30 17:00:21

+2

我看到了,不确定你的意思是一个SQL查询字符串还是一个http查询字符串。 – 2008-12-30 21:05:50

22

这里有一个简单的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); 

} 
0

这项工作,你可以使用:

void parse_str(str $input, array $output); 
//for example: 
$str = "first=value&arr[]=foo+bar&arr[]=baz"; 
parse_str($str); 
echo $first; // value 
echo $arr[0]; // foo bar 
echo $arr[1]; // baz 

parse_str($str, $output); 
echo $output['first']; // value 
echo $output['arr'][0]; // foo bar 
echo $output['arr'][1]; // baz 

好运。

2

正如除了@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); 
    } 
}