কোয়েরি স্ট্রিংকে একটি অ্যারেতে পার্স করুন


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
এই উত্তরের সাথে আমার সমস্যা আছে, কারণ আপনি একই কী একাধিকবার ব্যবহার করলে এটি কার্যকর হয় না (হ্যাঁ কারণ পিএইচপি অ্যারে কীগুলি অনন্য। সুতরাং ?key=lorem&key=ipsumফলাফলটি হবে array(["key"]=>"ipsum")প্রশ্নটি হল, s.th পেতে কোনও ফাংশন আছে কি? এই মত array(["key"]=>array("lorem", "ipsum"))বা আমার নিজের এই ফাংশনটি তৈরি করতে হবে?
মাবিআই

11
টেকনিক্যালি পিএইচপি এমনও আচরণ করবে ?key=lorem&key=ipsumযে আপনি যদি কেবলমাত্র key=ipsumইউআরএলে কোয়েরি স্ট্রিং সরবরাহ করে থাকেন। এবং আমি মনে করি কীটি পুনরায় ব্যবহার করা এবং ধারাবাহিক ফলাফল প্রত্যাশা করা বা কীটির সমস্ত উদাহরণ বজায় রাখা অবৈধ বলে বিবেচিত। কমপক্ষে পিএইচপি-তে প্রেরিত কোনও ক্যোরি স্ট্রিংয়ের জন্য বৈধ পন্থাটি হবে ?key[]=lorem&key[]=ipsum, সুতরাং আপনার জন্মভূমি পদ্ধতির &{x}=এক্স এর একাধিকবারের যে কোনও ঘটনার সন্ধান করতে পারে এবং এর সাথে প্রতিস্থাপন x[](এবং চিকিত্সা করা হবে!)
অ্যান্টনি

9
@ মাবি - ওহ, এবং দেখুন, অন্য কেউ আপনার সাথে একমত এবং ইতিমধ্যে তাদের নিজস্ব ফাংশন তৈরি করেছেন - php.net/manual/en/function.parse-str.php#76792
অ্যান্টনি

তা হেল্পফুল! আমি ?key[]=lorem&key[]=ipsumকয়েক সপ্তাহ আগে এটি এরকম করার সিদ্ধান্ত নিয়েছিলাম । তবে লিঙ্কটি ভাগ করে নেওয়ার জন্য ধন্যবাদ!
মাবিআই

2
নজরদারি করার মতো কিছু হ'ল স্ট্রিংগুলির মধ্যে '+' অন্তর্ভুক্ত, যেমন myemail+alias@gmail.com। এগুলি পার্স_স্ট্রিস্ট দ্বারা একটি স্পেসে পার্স করা হবে। কী = মাইমেল ওরফে@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']
সিপিল

স্ট্রিং ইউআরএল-এ কীভাবে অ্যারে করবেন। : অ্যারে ([কিছু পৃষ্ঠায়? আইডি] => 123 [ল্যাং] => জিআর [আকার] => 300) আউটপুট = কিছু পৃষ্ঠা? আইডি = 123 এবং ল্যাং = জিআর এবং আকার = 300
মেহুল



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

বর্তমান ইউআরএল থেকে অ্যারেতে কোয়েরি পার্স করার জন্য এটি এক-লাইনার:

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

1

আপনি পিএইচপি স্ট্রিং ফাংশন লুপ 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);

-3

এটি পিএইচপি কোডটি মাইএসকিএল এবং এমএসকিএল-তে কোয়েরি বিভক্ত করার জন্য

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 = 'সিসি'

এক্সএক্সএক্স বাম জোড় থেকে এক্সএক্সএক্স নির্বাচন করুন (এক্সএক্সএক্স নির্বাচন করুন) যেখানে (এক্সএক্সএক্স থেকে শীর্ষ 1 এক্সএক্সএক্সএক্স নির্বাচন করুন) এক্সএক্সএক্স ডেস্কের মাধ্যমে ওডার

আপনাকে ধন্যবাদ, ইন্দোনেশিয়া সেন্ট্রেডেপ্যাগাং ডট কম থেকে


-5

এই নির্দিষ্ট প্রশ্নের জন্য নির্বাচিত উত্তরটি সঠিক তবে ইউআরএল-তে অতিরিক্ত "ই" এর মতো যদি কোনও অতিরিক্ত কাজকর্মের প্যারামিটার থাকে তবে ফাংশনটি ত্রুটি বা ব্যতিক্রম ছাড়াই নীরবে ব্যর্থ হবে:

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 টির কোনও ত্রুটি বা ব্যতিক্রম ছোঁড়া ছাড়া চুপচাপ ব্যর্থ হবে ইউআরএল” " যা কোনও অ্যাপ্লিকেশন ভঙ্গ করতে পারে। যদিও এই উত্তরটি দুর্দান্ত নয়, এটি কোনও সমস্যা হাইলাইট করে। বিশেষত যদি আপনার অ্যাপ্লিকেশনটি ক্র্যাশ করতে পারে কেবলমাত্র নির্বিচারে অতিরিক্ত
প্যারামগুলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.