2008-12-30 56 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); 
    } 
}