Parsing string kueri ke dalam array

195

Bagaimana saya bisa mengubah string di bawah ini menjadi array ?

pg_id=2&parent_id=2&document&video 

Ini adalah array yang saya cari,

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

Jawaban:

330

Anda menginginkan parse_strfungsi tersebut, dan Anda perlu mengatur parameter kedua agar data dimasukkan ke dalam array alih-alih menjadi variabel individual.

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

parse_str($get_string, $get_array);

print_r($get_array);
Anthony
sumber
2
Saya punya masalah dengan jawaban ini, karena tidak berfungsi jika Anda menggunakan kunci yang sama beberapa kali (ya karena kunci array php unik). Jadi ?key=lorem&key=ipsumakan menghasilkan array(["key"]=>"ipsum")Pertanyaannya adalah, apakah ada fungsi untuk mendapatkan s.th. suka ini array(["key"]=>array("lorem", "ipsum"))atau apakah saya harus membuat fungsi ini sendiri?
MaBi
11
Secara teknis PHP juga akan memperlakukan ?key=lorem&key=ipsumseolah-olah Anda hanya menyediakan key=ipsumjika itu adalah string kueri pada URL. Dan saya pikir itu dianggap tidak sah untuk menggunakan kembali kunci dan mengharapkan hasil yang konsisten atau bahwa semua contoh kunci dipertahankan. Pendekatan yang valid, setidaknya untuk string kueri yang dikirim ke PHP, adalah ?key[]=lorem&key[]=ipsum, jadi pendekatan asal Anda mungkin mencari kejadian di &{x}=mana x muncul lebih dari sekali dan ganti dengan x[](dan memperlakukan? Sama seperti &)
Anthony
9
@Mabi - oh, dan lihat, orang lain sudah setuju dengan Anda dan sudah membuat fungsinya sendiri - php.net/manual/en/function.parse-str.php#76792
Anthony
Itu sangat membantu! Saya memutuskan untuk melakukannya seperti ini ?key[]=lorem&key[]=ipsumbeberapa minggu yang lalu. Tetapi terima kasih telah berbagi tautan!
MaBi
2
Yang harus diperhatikan adalah string yang menyertakan '+', seperti [email protected]. Ini akan diurai oleh parse_str ke spasi. key = myemail [email protected].
dudeman
61

Kadang-kadang parse_str()saja catatan akurat, dapat ditampilkan misalnya:

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

parse_str () akan mengembalikan:

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

Akan lebih baik untuk digabungkan parse_str()dengan parse_url()seperti:

$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
yassine2020
sumber
3
Saya kira itu mengharapkan$_SERVER['QUERY_STRING']
CpILL
cara array ke string url ex. : Array ([somepage? Id] => 123 [lang] => gr [size] => 300) output = somepage? Id = 123 & lang = gr & size = 300
mehul
31

Menggunakan parse_str().

$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
Roket Hazmat
sumber
18

Gunakan http://us1.php.net/parse_str

Perhatian, penggunaannya adalah:

parse_str($str, &$array);

tidak

$array = parse_str($str);
Ionut Bajescu
sumber
2
It's `parse_str ($ str, $ arr);` dan bukan parse_str($str,&$arr);kesalahan yang mengerikan
17

Jika Anda mengalami masalah dalam mengonversi string kueri ke array karena ampersand yang disandikan

&

maka pastikan untuk menggunakan html_entity_decode

Contoh:

// 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' =>
)
Casper Wilkes
sumber
14

Ada beberapa metode yang mungkin, tetapi untuk Anda, sudah ada fungsi bawaanparse_str

$array = array();
parse_str($string, $array);
var_dump($array);
KingCrunch
sumber
3

Ini adalah satu-baris untuk mem-parsing kueri dari URL saat ini ke dalam array:

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

Anda dapat menggunakan fungsi string PHP parse_str()diikuti dengan foreachloop.

$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);
JakeGould
sumber
-3

Ini adalah kode PHP untuk membagi kueri di mysql & 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;
}

Contoh:

Pertanyaan sebelumnya

pilih xx dari xx pilih xx, (pilih xx) dari xx mana y = 'cc' pilih xx dari xx gabung kiri (pilih xx) di mana (pilih top 1 xxx dari xxx) oder by xxx desc ";

Permintaan setelah

pilih xx dari xx

pilih xx, (pilih xx) dari xx di mana y = 'cc'

pilih xx dari xx gabung kiri (pilih xx) di mana (pilih top 1 xxx dari xxx) atau oleh xxx desc

Terima kasih, dari Indonesia Sentrapedagang.com

Dewa Putra
sumber
-5

Untuk pertanyaan spesifik ini, jawaban yang dipilih benar, tetapi jika ada parameter yang berlebihan — seperti "e" tambahan — di URL, fungsi akan secara diam-diam gagal tanpa kesalahan atau pengecualian dilemparkan:

a=2&b=2&c=5&d=4&e=1&e=2&e=3 

Jadi saya lebih suka menggunakan parser sendiri seperti:

//$_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" } 

Sekarang Anda memiliki semua kemunculan setiap parameter dalam lariknya sendiri, Anda selalu dapat menggabungkannya menjadi satu larik jika Anda mau.

Semoga itu bisa membantu!

Nassim
sumber
Anda seharusnya tidak pernah memiliki nama param kueri yang sama dengan nilai yang berbeda. Itu tidak masuk akal karena hanya satu yang akan diterima.
Cristian
3
@ Kristen: "Anda seharusnya tidak memiliki nama param permintaan yang sama dengan nilai yang berbeda." Anda benar, tetapi jawabannya menyatakan, "... URL yang fungsinya secara diam-diam akan gagal tanpa kesalahan atau pengecualian dilemparkan." Yang bisa merusak aplikasi. Meskipun jawaban ini tidak bagus, tetapi menyoroti masalah. Terutama jika aplikasi Anda dapat di-crash oleh seseorang yang secara sewenang-wenang mengajukan permintaan dengan tambahan params.
JakeGould