Respostas:
Você deseja a parse_str
função e precisa definir o segundo parâmetro para que os dados sejam colocados em uma matriz em vez de em variáveis individuais.
$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 se você fornecesse apenas key=ipsum
se essa fosse a string de consulta na URL. E acho que é considerado inválido reutilizar a chave e esperar resultados consistentes ou que todas as instâncias da chave sejam mantidas. A abordagem válida, pelo menos para uma string de consulta enviada ao PHP, seria ?key[]=lorem&key[]=ipsum
, portanto, sua abordagem doméstica pode procurar por quaisquer ocorrências de &{x}=
onde x ocorre mais de uma vez e substituir por x[]
(e tratando? O mesmo que &)
?key[]=lorem&key[]=ipsum
há algumas semanas. Mas obrigado por compartilhar o link!
Às vezes, por parse_str()
si só, a nota é precisa, ela pode exibir, por exemplo:
$url = "somepage?id=123&lang=gr&size=300";
parse_str () retornaria:
Array (
[somepage?id] => 123
[lang] => gr
[size] => 300
)
Seria melhor combinar parse_str()
com parse_url()
o seguinte:
$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
$_SERVER['QUERY_STRING']
Usando parse_str()
.
$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
Use http://us1.php.net/parse_str
Atenção, seu uso é:
parse_str($str, &$array);
não
$array = parse_str($str);
Se você estiver com problemas para converter uma string de consulta em uma matriz por causa de e comercial codificado
&
então não deixe de usar html_entity_decode
Exemplo:
// 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' =>
)
Este é o código PHP para dividir a consulta no mysql e 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;
}
Exemplo:
selecione xx de xx selecione xx, (selecione xx) de xx onde y = 'cc' selecione xx de xx junção esquerda (selecione xx) onde (selecione 1 xxx de xxx) ou mais por xxx desc ";
selecione xx de xx
selecione xx, (selecione xx) em xx, em que y = 'cc'
selecione xx de xx junção esquerda (selecione xx) onde (selecione 1 xxx de xxx) ou od por xxx desc
Obrigado, da Indonésia Sentrapedagang.com
Para esta pergunta específica, a resposta escolhida está correta, mas se houver um parâmetro redundante - como um "e" extra - no URL, a função falhará silenciosamente, sem que ocorra um erro ou exceção:
a=2&b=2&c=5&d=4&e=1&e=2&e=3
Então, eu prefiro usar meu próprio analisador da seguinte forma:
//$_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" }
Agora você tem todas as ocorrências de cada parâmetro em sua própria matriz, sempre pode mesclá-las em uma matriz, se desejar.
Espero que ajude!
?key=lorem&key=ipsum
, resultará emarray(["key"]=>"ipsum")
A questão é: existe uma função para obter s.th. assimarray(["key"]=>array("lorem", "ipsum"))
ou eu tenho que criar essa função por conta própria?