Respuestas:
Desea la parse_str
función y necesita establecer el segundo parámetro para que los datos se coloquen en una matriz en lugar de en variables individuales.
$get_string = "pg_id=2&parent_id=2&document&video";
parse_str($get_string, $get_array);
print_r($get_array);
?key=lorem&key=ipsum
como si solo proporcionara key=ipsum
si esa fuera la cadena de consulta en la URL. Y creo que se considera inválido reutilizar la clave y esperar resultados consistentes o que todas las instancias de la clave se conserven. El enfoque válido, al menos para una cadena de consulta enviada a PHP, sería ?key[]=lorem&key[]=ipsum
, por lo que su enfoque local podría buscar cualquier ocurrencia de &{x}=
donde x ocurra más de una vez y reemplazar con x[]
(y tratando? Igual que &)
?key[]=lorem&key[]=ipsum
hace algunas semanas. Pero gracias por compartir el enlace!
A veces parse_str()
solo es una nota precisa, podría mostrar, por ejemplo:
$url = "somepage?id=123&lang=gr&size=300";
parse_str () devolvería:
Array (
[somepage?id] => 123
[lang] => gr
[size] => 300
)
Sería mejor para combinar parse_str()
con parse_url()
este modo:
$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
$_SERVER['QUERY_STRING']
Utilizando parse_str()
.
$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
Utilice http://us1.php.net/parse_str
Atención, su uso es:
parse_str($str, &$array);
no
$array = parse_str($str);
Si tiene problemas para convertir una cadena de consulta en una matriz debido a los símbolos codificados
&
entonces asegúrese de usar html_entity_decode
Ejemplo:
// Input string //
$input = 'pg_id=2&parent_id=2&document&video';
// Parse //
parse_str(html_entity_decode($input), $out);
// Output of $out //
array(
'pg_id' => 2,
'parent_id' => 2,
'document' => ,
'video' =>
)
Existen varios métodos posibles, pero para usted, ya hay una parse_str
función integrada
$array = array();
parse_str($string, $array);
var_dump($array);
Este es el código PHP para dividir consultas en mysql y mssql
enter code here
function splitquery($strquery)
{
$arrquery=explode('select',$strquery);
$stry='';$strx='';
for($i=0;$i<count($arrquery);$i++)
{
if($i==1)
{
echo 'select '.trim($arrquery[$i]);
}
elseif($i>1)
{
$strx=trim($arrquery[($i-1)]);
if(trim(substr($strx,-1))!='(')
{
$stry=$stry.'
select '.trim($arrquery[$i]);
}
else
{
$stry=$stry.trim('select '.trim($arrquery[$i]));
}
$strx='';
}
}
return $stry;
}
Ejemplo:
seleccione xx de xx seleccione xx, (seleccione xx) de xx donde y = 'cc' seleccione xx de xx combinación izquierda (seleccione xx) donde (seleccione la parte superior 1 xxx de xxx) oder por xxx desc ";
seleccione xx de xx
seleccione xx, (seleccione xx) de xx donde y = 'cc'
seleccione xx desde xx combinación izquierda (seleccione xx) donde (seleccione 1 xxx superior desde xxx) oder por xxx desc
Gracias, desde Indonesia Sentrapedagang.com
Para esta pregunta específica, la respuesta elegida es correcta, pero si hay un parámetro redundante, como una "e" adicional, en la URL, la función fallará silenciosamente sin que se produzca un error o una excepción:
a=2&b=2&c=5&d=4&e=1&e=2&e=3
Así que prefiero usar mi propio analizador así:
//$_SERVER['QUERY_STRING'] = `a=2&b=2&c=5&d=4&e=100&e=200&e=300`
$url_qry_str = explode('&', $_SERVER['QUERY_STRING']);
//arrays that will hold the values from the url
$a_arr = $b_arr = $c_arr = $d_arr = $e_arr = array();
foreach( $url_qry_str as $param )
{
$var = explode('=', $param, 2);
if($var[0]=="a") $a_arr[]=$var[1];
if($var[0]=="b") $b_arr[]=$var[1];
if($var[0]=="c") $c_arr[]=$var[1];
if($var[0]=="d") $d_arr[]=$var[1];
if($var[0]=="e") $e_arr[]=$var[1];
}
var_dump($e_arr);
// will return :
//array(3) { [0]=> string(1) "100" [1]=> string(1) "200" [2]=> string(1) "300" }
Ahora que tiene todas las apariciones de cada parámetro en su propia matriz, siempre puede fusionarlas en una matriz si lo desea.
¡Espero que ayude!
?key=lorem&key=ipsum
resultará enarray(["key"]=>"ipsum")
La pregunta es, ¿hay una función para obtener algo? como estoarray(["key"]=>array("lorem", "ipsum"))
o tengo que crear esta función por mi cuenta?