Anda menginginkan parse_strfungsi tersebut, dan Anda perlu mengatur parameter kedua agar data dimasukkan ke dalam array alih-alih menjadi variabel individual.
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 &)
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:
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
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.
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.
?key=lorem&key=ipsum
akan menghasilkanarray(["key"]=>"ipsum")
Pertanyaannya adalah, apakah ada fungsi untuk mendapatkan s.th. suka iniarray(["key"]=>array("lorem", "ipsum"))
atau apakah saya harus membuat fungsi ini sendiri??key=lorem&key=ipsum
seolah-olah Anda hanya menyediakankey=ipsum
jika 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 denganx[]
(dan memperlakukan? Sama seperti &)?key[]=lorem&key[]=ipsum
beberapa minggu yang lalu. Tetapi terima kasih telah berbagi tautan!Kadang-kadang
parse_str()
saja catatan akurat, dapat ditampilkan misalnya:parse_str () akan mengembalikan:
Akan lebih baik untuk digabungkan
parse_str()
denganparse_url()
seperti:sumber
$_SERVER['QUERY_STRING']
Menggunakan
parse_str()
.sumber
Gunakan http://us1.php.net/parse_str
Perhatian, penggunaannya adalah:
tidak
sumber
parse_str($str,&$arr);
kesalahan yang mengerikanJika Anda mengalami masalah dalam mengonversi string kueri ke array karena ampersand yang disandikan
maka pastikan untuk menggunakan
html_entity_decode
Contoh:
sumber
Ada beberapa metode yang mungkin, tetapi untuk Anda, sudah ada fungsi bawaan
parse_str
sumber
Ini adalah satu-baris untuk mem-parsing kueri dari URL saat ini ke dalam array:
sumber
Anda dapat menggunakan fungsi string PHP
parse_str()
diikuti denganforeach
loop.sumber
Ini adalah kode PHP untuk membagi kueri di mysql & mssql
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
sumber
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:
Jadi saya lebih suka menggunakan parser sendiri seperti:
Sekarang Anda memiliki semua kemunculan setiap parameter dalam lariknya sendiri, Anda selalu dapat menggabungkannya menjadi satu larik jika Anda mau.
Semoga itu bisa membantu!
sumber