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

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);

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 myemail+alias@gmail.com. Ini akan diurai oleh parse_str ke spasi. key = myemail alias@gmail.com.
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 );

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


18

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

Perhatian, penggunaannya adalah:

parse_str($str, &$array);

tidak

$array = parse_str($str);

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

14

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

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

3

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

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

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);

-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


-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!


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.