सरणी में पार्स क्वेरी स्ट्रिंग


195

मैं एक स्ट्रिंग को नीचे एक सरणी में कैसे बदल सकता हूं ?

pg_id=2&parent_id=2&document&video 

यह वह सरणी है जिसकी मुझे तलाश है,

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

जवाबों:


330

आप parse_strफ़ंक्शन चाहते हैं, और आपको डेटा को अलग-अलग चर में रखने के लिए दूसरा पैरामीटर सेट करने की आवश्यकता है।

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

parse_str($get_string, $get_array);

print_r($get_array);

2
मुझे इस उत्तर के साथ एक समस्या है, क्योंकि यह काम नहीं करता है यदि आप एक ही कुंजी को कई बार उपयोग करते हैं (हाँ क्योंकि php सरणी कुंजियाँ अद्वितीय हैं)। तो सवाल ?key=lorem&key=ipsumमें परिणाम होगा array(["key"]=>"ipsum"), वहाँ s.th पाने के लिए एक समारोह है। इस तरह array(["key"]=>array("lorem", "ipsum"))या मुझे यह फ़ंक्शन अपने दम पर बनाना होगा?
मैबी

11
तकनीकी रूप से PHP भी मानो कि ?key=lorem&key=ipsumआपने केवल प्रदान किया है key=ipsumयदि वह URL पर क्वेरी स्ट्रिंग थे। और मुझे लगता है कि यह कुंजी को फिर से उपयोग करने के लिए अमान्य माना जाता है और लगातार परिणामों की अपेक्षा करता है या कि कुंजी के सभी उदाहरणों को बनाए रखा जाता है। कम से कम PHP के लिए भेजे गए एक क्वेरी स्ट्रिंग के लिए मान्य दृष्टिकोण, होगा ?key[]=lorem&key[]=ipsum, इसलिए आपका होमग्रोन दृष्टिकोण किसी भी घटना के लिए देख सकता है &{x}=जहां x एक से अधिक बार होता है और x[](और उपचार के रूप में? और साथ ही)
एंथनी

9
@ मबी - ओह, और देखो, कोई और आपके साथ सहमत है और पहले से ही अपना स्वयं का फ़ंक्शन बनाया है - php.net/manual/en/function.parse-str.php#76792
एंथनी

यह सहायक था! मैंने ?key[]=lorem&key[]=ipsumकुछ हफ्तों पहले इसे इस तरह करने का फैसला किया । लेकिन लिंक साझा करने के लिए धन्यवाद!
माबी

2
कुछ देखने के लिए तार हैं जिनमें '+' शामिल हैं, जैसे myemail+alias@gmail.com। इन्हें पार्स_स्ट्रस्ट द्वारा एक स्थान पर पार्स किया जाएगा। कुंजी = myemail alias@gmail.com।
dudeman

61

कभी-कभी 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 );

3
मुझे लगता है कि यह उम्मीद कर रहा है$_SERVER['QUERY_STRING']
CpILL

कैसे स्ट्रिंग यूआरएल पूर्व करने के लिए सरणी के लिए। : ऐरे ([somepage? Id] => 123 [lang] => जीआर [आकार] => 300) = कोई पेज? आईडी = 123 और लैंग = जीआर और आकार = 300
mehul



17

यदि आपको एन्कोडेड एम्परसेंड के कारण क्वेरी स्ट्रिंग को किसी सरणी में परिवर्तित करने में समस्या हो रही है

&

तो उपयोग करना सुनिश्चित करें 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' =>
)


3

यह वर्तमान URL से सरणी में क्वेरी को पार्स करने के लिए एक-लाइनर है:

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

1

आप लूप के parse_str()बाद PHP स्ट्रिंग फ़ंक्शन का उपयोग कर सकते हैं 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);

-3

यह mysql & mssql में क्वेरी को विभाजित करने के लिए PHP कोड है

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 से xx चुनें (xx का चयन करें) जहाँ y = 'cc'

xx से बाईं ओर xx का चयन करें (xx का चयन करें) जहां (xxx से शीर्ष 1 xxx का चयन करें) xxx desc द्वारा ओडर करें

धन्यवाद, इंडोनेशिया Sentrapedagang.com से


-5

इस विशिष्ट प्रश्न के लिए चुना हुआ उत्तर सही है, लेकिन यदि कोई अतिरिक्त पैरामीटर है - जैसे कि एक अतिरिक्त "e" - तो URL फंक्शन चुपचाप किसी त्रुटि या अपवाद के बिना विफल हो जाएगा:

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

इसलिए मैं अपने खुद के पार्सर का उपयोग करना पसंद करता हूं:

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

अब आपके पास प्रत्येक पैरामीटर की सभी सरणीएँ हैं, यदि आप चाहें, तो आप उन्हें हमेशा एक सरणी में मर्ज कर सकते हैं।

उम्मीद है की वो मदद करदे!


आपको अलग-अलग मानों के साथ कभी भी एक ही क्वेरी परम नाम नहीं होना चाहिए। इसका कोई मतलब नहीं है कि केवल एक को वैसे भी स्वीकार किया जाएगा।
क्रिस्टियन

3
@ क्रिश्चियन: "आपके पास अलग-अलग मूल्यों के साथ एक ही क्वेरी परम नाम नहीं होना चाहिए।" आप सही हैं, लेकिन जवाब में कहा गया है, "... URL फंक्शन चुपचाप एक त्रुटि या अपवाद के बिना विफल हो जाएगा।" जो किसी एप्लिकेशन को तोड़ सकता है। हालांकि यह जवाब महान नहीं है, यह एक मुद्दे को उजागर करता है। खासकर अगर आपका आवेदन किसी के द्वारा दुर्घटनाग्रस्त हो सकता है तो मनमाने ढंग से अतिरिक्त
पैरामेट्स के
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.