【发布时间】:2010-09-28 21:15:13
【问题描述】:
我正在寻找 PHP 函数的名称,以便从键值对数组构建查询字符串。请注意,我正在寻找 内置 PHP 函数来执行此操作,而不是自制函数(这似乎是谷歌搜索返回的所有内容)。有一个,我只是不记得它的名字或在 php.net 上找到它。 IIRC 它的名字不是那么直观。
【问题讨论】:
标签: php
我正在寻找 PHP 函数的名称,以便从键值对数组构建查询字符串。请注意,我正在寻找 内置 PHP 函数来执行此操作,而不是自制函数(这似乎是谷歌搜索返回的所有内容)。有一个,我只是不记得它的名字或在 php.net 上找到它。 IIRC 它的名字不是那么直观。
【问题讨论】:
标签: php
您正在寻找http_build_query()。
【讨论】:
echo http_build_query(array("foo"=>"bar","bar"=>null)) 只会产生 foo=bar
这是一个简单的 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 );
}
【讨论】:
就像对@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);
}
}
【讨论】:
Implode 将为您将一个数组组合成一个字符串,但是要从一个键/值对中进行 SQL 查询,您必须编写自己的函数。
【讨论】: