ฉันจะเปลี่ยนสตริงด้านล่างเป็นอาร์เรย์ได้อย่างไร
pg_id=2&parent_id=2&document&video
นี่คืออาร์เรย์ที่ฉันกำลังมองหา
array(
'pg_id' => 2,
'parent_id' => 2,
'document' => ,
'video' =>
)
ฉันจะเปลี่ยนสตริงด้านล่างเป็นอาร์เรย์ได้อย่างไร
pg_id=2&parent_id=2&document&video
นี่คืออาร์เรย์ที่ฉันกำลังมองหา
array(
'pg_id' => 2,
'parent_id' => 2,
'document' => ,
'video' =>
)
คำตอบ:
คุณต้องการparse_str
ฟังก์ชั่นและคุณต้องตั้งค่าพารามิเตอร์ที่สองเพื่อให้ข้อมูลใส่ในอาร์เรย์แทนที่จะเป็นตัวแปรแต่ละตัว
$get_string = "pg_id=2&parent_id=2&document&video";
parse_str($get_string, $get_array);
print_r($get_array);
?key=lorem&key=ipsum
เหมือนว่าคุณให้ไว้key=ipsum
หากเป็นสตริงการสืบค้นใน URL และฉันคิดว่ามันไม่ถูกต้องที่จะนำคีย์กลับมาใช้ใหม่และคาดหวังผลลัพธ์ที่สอดคล้องกันหรือว่าอินสแตนซ์ทั้งหมดของคีย์จะถูกเก็บไว้ วิธีการที่ถูกต้องอย่างน้อยสำหรับสตริงแบบสอบถามที่ส่งไปยัง PHP จะเป็น?key[]=lorem&key[]=ipsum
ดังนั้นวิธีการพื้นบ้านของคุณอาจมองหาเหตุการณ์ที่เกิดขึ้น &{x}=
ที่ x เกิดขึ้นมากกว่าหนึ่งครั้งและแทนที่ด้วยx[]
(และปฏิบัติเช่นเดียวกับ &)
?key[]=lorem&key[]=ipsum
หลายสัปดาห์ก่อน แต่ขอบคุณที่แบ่งปันลิงค์!
บางครั้งparse_str()
เพียงอย่างเดียวก็ทราบถูกต้องมันสามารถแสดงตัวอย่าง:
$url = "somepage?id=123&lang=gr&size=300";
parse_str () จะกลับมา:
Array (
[somepage?id] => 123
[lang] => gr
[size] => 300
)
มันจะดีกว่าที่จะรวมparse_str()
กับparse_url()
เช่น:
$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
$_SERVER['QUERY_STRING']
parse_str()
การใช้
$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
ใช้http://us1.php.net/parse_str
ความสนใจมันคือการใช้งาน:
parse_str($str, &$array);
ไม่
$array = parse_str($str);
หากคุณมีปัญหาในการแปลงสตริงเคียวรีเป็นอาร์เรย์เนื่องจากแอมป์แซนด์ที่เข้ารหัส
&
จากนั้นให้แน่ใจว่าจะใช้ html_entity_decode
ตัวอย่าง:
// 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' =>
)
นี่คือซับในสำหรับการแยกวิเคราะห์เคียวรีจาก URL ปัจจุบันไปยังอาร์เรย์:
parse_str($_SERVER['QUERY_STRING'], $query);
คุณสามารถใช้ฟังก์ชันสตริงของ PHP parse_str()
แล้วตามด้วยforeach
ลูป
$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);
นี่คือรหัส PHP เพื่อแยกคิวรีใน 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;
}
ตัวอย่าง:
เลือก xx จาก xx เลือก xx, (เลือก xx) จาก xx โดยที่ y = 'cc' เลือก xx จาก xx left join (เลือก xx) โดยที่ (เลือก 1 อันดับแรก xxx จาก xxx) อีกครั้งโดย xxx desc ";
เลือก xx จาก xx
เลือก xx (เลือก xx) จาก xx โดยที่ y = 'cc'
เลือก xx จาก xx left join (เลือก xx) โดยที่ (เลือก 1 xxx อันดับแรกจาก xxx) หรืออื่น ๆ ด้วย xxx desc
ขอบคุณจากอินโดนีเซียSentrapedagang.com
สำหรับคำถามเฉพาะนี้คำตอบที่เลือกนั้นถูกต้อง แต่หากมีพารามิเตอร์ซ้ำซ้อน - เช่น "e" พิเศษใน URL ฟังก์ชันจะล้มเหลวในทันทีโดยไม่มีข้อผิดพลาดหรือข้อยกเว้นถูกโยนทิ้ง:
a=2&b=2&c=5&d=4&e=1&e=2&e=3
ดังนั้นฉันชอบใช้ parser ของตัวเองเช่น:
//$_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" }
ตอนนี้คุณมีการเกิดขึ้นทั้งหมดของแต่ละพารามิเตอร์ในอาเรย์ของตัวเองคุณสามารถรวมเข้าไปในอาเรย์เดียวถ้าคุณต้องการ
หวังว่าจะช่วย!
?key=lorem&key=ipsum
จะส่งผลให้array(["key"]=>"ipsum")
คำถามคือมีฟังก์ชั่นที่จะได้รับ s.th แบบนี้array(["key"]=>array("lorem", "ipsum"))
หรือฉันต้องสร้างฟังก์ชั่นนี้ด้วยตัวเอง?