2008-12-30 28 views
133

Tôi đang tìm tên của hàm PHP để tạo chuỗi truy vấn từ một mảng các cặp giá trị khóa. Xin lưu ý, tôi đang tìm kiếm được xây dựng trong chức năng PHP để làm điều này, không phải là một homebrew một (đó là tất cả một tìm kiếm google dường như trở lại). Có một, tôi chỉ không thể nhớ tên của nó hoặc tìm thấy nó trên php.net. IIRC tên của nó không phải là trực quan.Chức năng PHP để xây dựng chuỗi truy vấn từ mảng

Trả lời

255

Bạn đang tìm kiếm http_build_query().

+3

Vâng, đó là một. –

+2

Tôi muốn biết về chức năng đó từ lâu. Heh. – ceejayoz

+0

Tôi cũng không bao giờ nhớ được. – Rimian

0

Implode sẽ kết hợp một mảng thành một chuỗi cho bạn, nhưng để thực hiện một truy vấn SQL ra một cặp kay/giá trị mà bạn' sẽ phải viết chức năng của riêng bạn.

+0

Đã cố gắng nhưng không hoạt động. Tôi đang cố gắng xây dựng một chuỗi truy vấn http yêu cầu cả khóa và giá trị từ mảng, implode không thể làm điều này. –

+2

Tôi thấy, không chắc chắn nếu bạn có nghĩa là một chuỗi truy vấn SQL hoặc một chuỗi truy vấn http. –

22

Dưới đây là một việc thực hiện php4 thân thiện đơn giản:

/** 
* 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

Tôi đoán bạn không thấy câu trả lời được chấp nhận? –

+29

đây là phiên bản php4. – SuitedSloth

+1

Khi thực hiện giải mã, PHP cũng xuất hiện để giải mã phần trăm khóa. Có thể đáng làm điều đó ở đây? – cloudfeet

0

nhưng đối với ngược tác phẩm này, bạn có thể sử dụng:

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 

Chúc may mắn.

2

Chỉ cần thêm vào câu trả lời của @thatjuan.
Phiên bản PHP4 tương thích khác về điều này:

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); 
    } 
} 
Các vấn đề liên quan