Analysieren Sie die Abfragezeichenfolge in ein Array


195

Wie kann ich eine Zeichenfolge unten in ein Array verwandeln ?

pg_id=2&parent_id=2&document&video 

Dies ist das Array, das ich suche,

array(
    'pg_id' => 2,
    'parent_id' => 2,
    'document' => ,
    'video' =>
)

Antworten:


330

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.

$get_string = "pg_id=2&parent_id=2&document&video";

parse_str($get_string, $get_array);

print_r($get_array);

2
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 &)
Anthony

9
@Mabi - oh, und schauen Sie, jemand anderes stimmt Ihnen zu und hat bereits eine eigene Funktion erstellt - php.net/manual/en/function.parse-str.php#76792
Anthony

Das war hilfreich! Ich habe mich vor ?key[]=lorem&key[]=ipsumeinigen Wochen dazu entschlossen . Aber danke, dass du den Link geteilt hast!
MaBi

2
Achten Sie auf Zeichenfolgen mit '+' wie myemail+alias@gmail.com. Diese werden von parse_str in ein Leerzeichen analysiert. key = myemail alias@gmail.com.
Dudeman

61

Manchmal ist parse_str()allein die Note genau, sie könnte zum Beispiel Folgendes anzeigen:

$url = "somepage?id=123&lang=gr&size=300";

parse_str () würde zurückgeben:

Array ( 
    [somepage?id] => 123 
    [lang] => gr 
    [size] => 300 
)

Es wäre besser, parse_str()mit parse_url()so etwas zu kombinieren :

$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );

3
Ich denke, es wird erwartet$_SERVER['QUERY_STRING']
CpILL

wie man Array zu String URL ex. : Array ([somepage? Id] => 123 [lang] => gr [size] => 300) output = somepage? Id = 123 & lang = gr & size = 300
mehul



17

Wenn Sie Probleme haben, eine Abfragezeichenfolge aufgrund von codiertem kaufmännischem Und in ein Array zu konvertieren

&

dann unbedingt verwenden html_entity_decode

Beispiel:

// 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' =>
)

14

Es gibt mehrere mögliche Methoden, aber für Sie gibt es bereits eine integrierte parse_strFunktion

$array = array();
parse_str($string, $array);
var_dump($array);

3

Dies ist ein Einzeiler zum Parsen von Abfragen von der aktuellen URL in ein Array:

parse_str($_SERVER['QUERY_STRING'], $query);

1

Sie können die PHP-String-Funktion parse_str()gefolgt von einer foreachSchleife verwenden.

$str="pg_id=2&parent_id=2&document&video";
parse_str($str,$my_arr);
foreach($my_arr as $key=>$value){
  echo "$key => $value<br>";
}
print_r($my_arr);

-3

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

Vielen Dank aus Indonesien Sentrapedagang.com


-5

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.

Hoffentlich hilft das!


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.
JakeGould
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.