Câu trả lời:
Bạn muốn parse_str
hàm và bạn cần đặt tham số thứ hai để dữ liệu được đặt trong một mảng thay vì thành các biến riêng lẻ.
$get_string = "pg_id=2&parent_id=2&document&video";
parse_str($get_string, $get_array);
print_r($get_array);
?key=lorem&key=ipsum
như thể bạn chỉ cung cấp key=ipsum
nếu đó là chuỗi truy vấn trên URL. Và tôi nghĩ rằng nó được coi là không hợp lệ để sử dụng lại khóa và mong đợi kết quả nhất quán hoặc tất cả các phiên bản của khóa được giữ lại. Cách tiếp cận hợp lệ, ít nhất là cho một chuỗi truy vấn được gửi tới PHP, ?key[]=lorem&key[]=ipsum
vì vậy, cách tiếp cận cây nhà của bạn có thể tìm kiếm bất kỳ sự cố nào xảy ra trong &{x}=
đó x xảy ra nhiều lần và thay thế bằng x[]
(và xử lý? Giống như &)
?key[]=lorem&key[]=ipsum
vài tuần trước. Nhưng cảm ơn vì đã chia sẻ liên kết!
Đôi khi parse_str()
một mình là ghi chú chính xác, nó có thể hiển thị ví dụ:
$url = "somepage?id=123&lang=gr&size=300";
parse_str () sẽ trả về:
Array (
[somepage?id] => 123
[lang] => gr
[size] => 300
)
Sẽ tốt hơn nếu kết hợp parse_str()
với parse_url()
như vậy:
$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
$_SERVER['QUERY_STRING']
Sử dụng parse_str()
.
$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
Sử dụng http://us1.php.net/parse_str
Chú ý, đó là cách sử dụng là:
parse_str($str, &$array);
không phải
$array = parse_str($str);
Nếu bạn gặp sự cố khi chuyển chuỗi truy vấn thành mảng vì ký hiệu được mã hóa
&
sau đó hãy chắc chắn để sử dụng html_entity_decode
Thí dụ:
// 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' =>
)
Đây là mã PHP để phân tách truy vấn trong 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;
}
Thí dụ:
chọn xx từ xx chọn xx, (chọn xx) từ xx trong đó y = 'cc' chọn xx từ xx bên trái tham gia (chọn xx) trong đó (chọn top 1 xxx từ xxx) oder bởi xxx desc ";
chọn xx từ xx
chọn xx, (chọn xx) từ xx trong đó y = 'cc'
chọn xx từ xx bên trái tham gia (chọn xx) trong đó (chọn top 1 xxx từ xxx) oder theo xxx desc
Cảm ơn bạn, từ Indonesia Sentrapedagang.com
Đối với câu hỏi cụ thể này, câu trả lời được chọn là chính xác nhưng nếu có một tham số dự phòng, giống như một "e" bổ sung thì URL sẽ tự động bị lỗi mà không có lỗi hoặc ngoại lệ bị ném:
a=2&b=2&c=5&d=4&e=1&e=2&e=3
Vì vậy, tôi thích sử dụng trình phân tích cú pháp của riêng mình như vậy:
//$_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" }
Bây giờ bạn có tất cả các lần xuất hiện của từng tham số trong mảng riêng của nó, bạn luôn có thể hợp nhất chúng thành một mảng nếu bạn muốn.
Mong rằng sẽ giúp!
?key=lorem&key=ipsum
sẽ dẫn đếnarray(["key"]=>"ipsum")
Câu hỏi là, có một chức năng để có được s.th. như thế nàyarray(["key"]=>array("lorem", "ipsum"))
hay tôi phải tự tạo chức năng này?