Sie möchten die parse_strFunktion und müssen den zweiten Parameter festlegen, damit die Daten in ein Array anstatt in einzelne Variablen eingefügt werden.
Ich habe ein Problem mit dieser Antwort, weil es nicht funktioniert, wenn Sie denselben Schlüssel mehrmals verwenden (ja, weil in PHP-Array Schlüssel eindeutig sind). So ?key=lorem&key=ipsumwird in Folge array(["key"]=>"ipsum")die Frage ist, gibt es eine Funktion s.th. zu erhalten so array(["key"]=>array("lorem", "ipsum"))oder muss ich diese Funktion selbst erstellen?
MaBi
11
Technisch würde PHP auch so behandeln, ?key=lorem&key=ipsumals hätten Sie nur angegeben, key=ipsumwenn dies die Abfragezeichenfolge in der URL wäre. Und ich denke, es wird als ungültig angesehen, den Schlüssel wiederzuverwenden und konsistente Ergebnisse zu erwarten, oder dass alle Instanzen des Schlüssels beibehalten werden. Der gültige Ansatz, zumindest für eine Abfrage - String zu PHP gesendet, wäre ?key[]=lorem&key[]=ipsum, so dass Ihr homegrown Ansatz für alle Vorkommen von aussehen könnte , &{x}=wo x mehr als einmal vorkommt und ersetzen x[](und die Behandlung genauso wie &)
Dies ist der PHP-Code zum Teilen der Abfrage in MySQL und 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;}
Beispiel:
Abfrage vor
wähle xx aus xx wähle xx, (wähle xx) aus xx wobei y = 'cc' wähle xx aus xx linker Join (wähle xx) wobei (wähle oben 1 xxx aus xxx) oder mit xxx desc ";
Abfrage nach
wähle xx aus xx
wähle xx, (wähle xx) aus xx wobei y = 'cc'
Wählen Sie xx aus xx links verbinden (wählen Sie xx), wobei (wählen Sie oben 1 xxx aus xxx) oder durch xxx absteigend
Für diese spezielle Frage ist die gewählte Antwort korrekt. Wenn die URL jedoch einen redundanten Parameter wie ein zusätzliches "e" enthält, schlägt die Funktion stillschweigend fehl, ohne dass ein Fehler oder eine Ausnahme ausgelöst wird:
a=2&b=2&c=5&d=4&e=1&e=2&e=3
Deshalb bevorzuge ich es, meinen eigenen Parser wie folgt zu verwenden:
//$_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" }
Jetzt haben Sie alle Vorkommen jedes Parameters in einem eigenen Array. Sie können sie jederzeit zu einem Array zusammenführen, wenn Sie möchten.
Sie sollten niemals denselben Abfrageparameternamen mit unterschiedlichen Werten haben. Es macht keinen Sinn, da sowieso nur einer akzeptiert wird.
Cristian
3
@Cristian: "Sie sollten niemals denselben Abfrageparameternamen mit unterschiedlichen Werten haben." Sie haben Recht, aber in der Antwort heißt es: "... die URL, bei der die Funktion stillschweigend fehlschlägt, ohne dass ein Fehler oder eine Ausnahme ausgelöst wird." Welches könnte eine Anwendung brechen. Diese Antwort ist zwar nicht großartig, zeigt jedoch ein Problem auf. Vor allem, wenn Ihre Anwendung von jemandem abgestürzt werden kann, der nur willkürlich eine Anfrage mit zusätzlichen Parametern stellt.
?key=lorem&key=ipsum
wird in Folgearray(["key"]=>"ipsum")
die Frage ist, gibt es eine Funktion s.th. zu erhalten soarray(["key"]=>array("lorem", "ipsum"))
oder muss ich diese Funktion selbst erstellen??key=lorem&key=ipsum
als hätten Sie nur angegeben,key=ipsum
wenn dies die Abfragezeichenfolge in der URL wäre. Und ich denke, es wird als ungültig angesehen, den Schlüssel wiederzuverwenden und konsistente Ergebnisse zu erwarten, oder dass alle Instanzen des Schlüssels beibehalten werden. Der gültige Ansatz, zumindest für eine Abfrage - String zu PHP gesendet, wäre?key[]=lorem&key[]=ipsum
, so dass Ihr homegrown Ansatz für alle Vorkommen von aussehen könnte ,&{x}=
wo x mehr als einmal vorkommt und ersetzenx[]
(und die Behandlung genauso wie &)?key[]=lorem&key[]=ipsum
einigen Wochen dazu entschlossen . Aber danke, dass du den Link geteilt hast!Manchmal ist
parse_str()
allein die Note genau, sie könnte zum Beispiel Folgendes anzeigen:parse_str () würde zurückgeben:
Es wäre besser,
parse_str()
mitparse_url()
so etwas zu kombinieren :quelle
$_SERVER['QUERY_STRING']
Verwenden von
parse_str()
.quelle
Verwenden Sie http://us1.php.net/parse_str
Achtung, es wird verwendet:
nicht
quelle
parse_str($str,&$arr);
schrecklicher FehlerWenn Sie Probleme haben, eine Abfragezeichenfolge aufgrund von codiertem kaufmännischem Und in ein Array zu konvertieren
dann unbedingt verwenden
html_entity_decode
Beispiel:
quelle
Es gibt mehrere mögliche Methoden, aber für Sie gibt es bereits eine integrierte
parse_str
Funktionquelle
Dies ist ein Einzeiler zum Parsen von Abfragen von der aktuellen URL in ein Array:
quelle
Sie können die PHP-String-Funktion
parse_str()
gefolgt von einerforeach
Schleife verwenden.quelle
Dies ist der PHP-Code zum Teilen der Abfrage in MySQL und MSSQL
Beispiel:
Abfrage vor
wähle xx aus xx wähle xx, (wähle xx) aus xx wobei y = 'cc' wähle xx aus xx linker Join (wähle xx) wobei (wähle oben 1 xxx aus xxx) oder mit xxx desc ";
Abfrage nach
wähle xx aus xx
wähle xx, (wähle xx) aus xx wobei y = 'cc'
Wählen Sie xx aus xx links verbinden (wählen Sie xx), wobei (wählen Sie oben 1 xxx aus xxx) oder durch xxx absteigend
Vielen Dank aus Indonesien Sentrapedagang.com
quelle
Für diese spezielle Frage ist die gewählte Antwort korrekt. Wenn die URL jedoch einen redundanten Parameter wie ein zusätzliches "e" enthält, schlägt die Funktion stillschweigend fehl, ohne dass ein Fehler oder eine Ausnahme ausgelöst wird:
Deshalb bevorzuge ich es, meinen eigenen Parser wie folgt zu verwenden:
Jetzt haben Sie alle Vorkommen jedes Parameters in einem eigenen Array. Sie können sie jederzeit zu einem Array zusammenführen, wenn Sie möchten.
Hoffentlich hilft das!
quelle