2008-12-30 11 views
133

Estoy buscando el nombre de la función de PHP para construir una cadena de consulta a partir de una matriz de pares de valores clave. Tenga en cuenta que estoy buscando la función incorporada en PHP para hacer esto, no una función casera (que es todo lo que parece una búsqueda de google). Hay uno, simplemente no puedo recordar su nombre o encontrarlo en php.net. IIRC su nombre no es tan intuitivo.Función de PHP para construir una cadena de consulta desde la matriz

Respuesta

255

Está buscando http_build_query().

+3

Sí, ese es el indicado. –

+2

Desearía haber sabido acerca de esa función hace mucho tiempo. Je. – ceejayoz

+0

Nunca puedo recordarlo tampoco. – Rimian

0

Implode combinará una matriz en una cadena para usted, pero para hacer una consulta SQL a cabo una kay/valor par que' Tendré que escribir tu propia función.

+0

intentado eso, pero no va a funcionar. Estoy intentando construir una cadena de consulta http que requiera tanto las claves como los valores de la matriz, implode no puede hacer esto. –

+2

Veo, no estaba seguro de si se refería a una cadena de consulta SQL o una cadena de consulta http. –

22

Aquí es un simple php4-amigable aplicació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

Supongo que no vio la respuesta aceptada? –

+29

esta es una versión php4. – SuitedSloth

+1

Al hacer su decodificación, PHP parece decodificar porcentualmente la clave también. Posiblemente vale la pena hacer eso aquí? – cloudfeet

0

pero para inversa este trabajo, puede utilizar:

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 

Buena suerte.

2

Así como la adición a la respuesta de @thatjuan.
versión PHP4 más compatible de esto:

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); 
    } 
} 
Cuestiones relacionadas