কীভাবে কোনও ক্যারি স্ট্রিংয়ের মধ্যে একটি অ্যারে পাস করবেন?


353

কোয়েরি স্ট্রিংয়ের মাধ্যমে কোনও অ্যারে পাস করার কোনও মানক উপায় আছে?

পরিষ্কার হয়ে উঠতে, আমার একাধিক মান সহ একটি ক্যোয়ারী স্ট্রিং রয়েছে যার মধ্যে একটি অ্যারের মান হবে be আমি চাইছি যে ক্যোরিয় স্ট্রিংয়ের মানটিকে একটি অ্যারের হিসাবে বিবেচনা করা হবে - আমি চাই না যে অ্যারেরটি বিস্ফোরিত হবে যাতে এটি অন্যান্য ক্যোয়ারী স্ট্রিং ভেরিয়েবলগুলির থেকে পৃথক হয়।

এছাড়াও, এই পোস্টের উত্তর অনুসারে , লেখক পরামর্শ দিয়েছেন যে অ্যারেগুলির জন্য ক্যোরিয় স্ট্রিং সমর্থনটি সংজ্ঞায়িত করা হয়নি। এটা কি সঠিক?

সম্পাদনা করুন:

উপর @ Alex এর উত্তর নির্ভর করে, সেখানে এই কাজ করার কোন আদর্শ উপায়, তাই আমার ফলো আপ তারপর কি একটি সহজ উপায় হল চিনতে যে paramater আমি পড়া করছি উভয় একটি অ্যারে পিএইচপি এবং জাভাস্ক্রিপ্ট ?

একাধিক প্যারামের একই নামকরণ করা কি গ্রহণযোগ্য হবে এবং আমি কীভাবে জানতে পারি যে সেগুলি অ্যারের সাথে সম্পর্কিত? উদাহরণ:

?myarray=value1&myarray=value2&myarray=value3...

নাকি এই খারাপ অভ্যাস হবে?


আপনি কোন কাঠামো ব্যবহার করছেন? কিছু ফ্রেমওয়ার্কের ক্যোরিস্ট্রিংগুলিতে অ্যারে পাস করার জন্য পদ্ধতি রয়েছে।
keyboardP


2
যখন আপনি কেবল করতে পারলেন আপনি কেন এটি করতে চাইবেন:? Myarray = মান 1, মান 2, মান
সেরোডিস

18
@ এসরয়েডস: যদি তাকে কমা, প্রশ্ন চিহ্ন, সমান চিহ্ন এবং প্রিন্টযোগ্য অক্ষরগুলি পাস করতে হয় তবে কী হবে?
বেরি সাকালা

উত্তর:


429

আমি যা বুঝতে পেরেছি তা এখানে:

মাল্টি-ভ্যালু ফর্ম ক্ষেত্রগুলি জমা দেওয়া, যেমন GET / POST vars এর মাধ্যমে অ্যারে জমা দেওয়া, বিভিন্নভাবে করা যেতে পারে, কারণ কোনও স্ট্যান্ডার্ড অগত্যা বানান হয় না।

বহু-মান ক্ষেত্র বা অ্যারে প্রেরণের তিনটি সম্ভাব্য উপায় হ'ল:

  • ?cars[]=Saab&cars[]=Audi (সেরা উপায়- পিএইচপি এটি অ্যারেতে পড়ে)
  • ?cars=Saab&cars=Audi (খারাপ উপায়- পিএইচপি কেবল সর্বশেষ মান নিবন্ধ করবে)
  • ?cars=Saab,Audi (এটি চেষ্টা করেননি)

ফর্ম উদাহরণ

একটি ফর্মের উপর, বহু-মূল্যবান ক্ষেত্রগুলি একাধিকটিতে একটি নির্বাচিত বাক্স সেট রূপ নিতে পারে :

<form> 
    <select multiple="multiple" name="cars[]"> 
        <option>Volvo</option> 
        <option>Saab</option> 
        <option>Mercedes</option> 
    </select>
</form>

(দ্রষ্টব্য: এই ক্ষেত্রে, নির্বাচন নিয়ন্ত্রণের নামকরণ করা গুরুত্বপূর্ণ হবে some_name[], যাতে ফলাফলের অনুরোধ ওয়ার্স পিএইচপি দ্বারা অ্যারে হিসাবে নিবন্ধিত হবে)

... বা একই নামে একাধিক লুকানো ক্ষেত্র :

<input type="hidden" name="cars[]" value="Volvo">
<input type="hidden" name="cars[]" value="Saab">
<input type="hidden" name="cars[]" value="Mercedes">

দ্রষ্টব্য:field[] একাধিক মানের জন্য ব্যবহার করা সত্যই দুর্বল নথিভুক্ত। আমি কোয়েরি স্ট্রিং - উইকিপিডিয়া বা মাল্টি-সিলেক্ট ইনপুটগুলির সাথে ডাব্লু 3 সি ডক্সে বহু-মূল্যবান কীগুলির বিভাগে এর কোনও উল্লেখ দেখতে পাচ্ছি না ।


হালনাগাদ

মন্তব্যকারীরা যেমন উল্লেখ করেছেন, এটি অনেক কাঠামো-নির্দিষ্ট। কিছু উদাহরণ:

অনুসন্ধানের স্ট্রিং:

?list_a=1&list_a=2&list_a=3&list_b[]=1&list_b[]=2&list_b[]=3&list_c=1,2,3

পাগল:

"list_a": "3", 
"list_b":[
    "1",
    "2",
    "3"
  ], 
"list_c": "1,2,3"

কৌণিক:

 "list_a": [
    "1",
    "2",
    "3"
  ],
  "list_b[]": [
    "1",
    "2",
    "3"
  ],
  "list_c": "1,2,3"

(কৌণিক আলোচনা )

নোড.জেএস , ওয়ার্ডপ্রেস , এএসপি ডটেনে উদাহরণগুলির জন্য মন্তব্যগুলি দেখুন


অর্ডার বজায় রাখা: আরও একটি বিষয় বিবেচনা করতে হবে তা হল আপনার যদি আপনার আইটেমগুলির ক্রম বজায় রাখা প্রয়োজন (অর্থাত একটি আদেশযুক্ত তালিকা হিসাবে অ্যারে), তবে আপনার কাছে কেবলমাত্র একটি বিকল্প রয়েছে যা মানগুলির একটি সীমানা ছাড়িয়ে যাচ্ছে এবং স্পষ্টতই এটিকে রূপান্তর করছে একটি অ্যারে নিজেকে।


3
আমি মনে করি যে উইকি বা ডাব্লু 3 সি এর মতো সাধারণ উত্সগুলিতে এই কার্যকারিতাটি নথিবদ্ধ না হওয়ার কারণ হ'ল এটি সাধারণত ওয়েব ফ্রেমওয়ার্ক দ্বারা সমর্থিত নয়। পিএইচপি এবং আমি মনে করি রেলগুলি স্বয়ংক্রিয়ভাবে একাধিক "কী []" ক্যোয়ারী প্যারামিটারগুলিকে একটি অ্যারে রূপান্তর করে। অন্যরা না।
কার্ল জি

3
নোডেজ কোয়েরিস্ট্রিং মডিউলটি ?cars=Saab&cars=Audiফর্মটি ব্যবহার করে
SystemParadox

53
এক্সপ্রেসে (নোড.জেএস), উভয়ই ?cars=Saab&cars=Audiএবং ?cars[]=Saab&cars[]=Audiঅ্যারেতে পরিণত হয়। তবে, ?cars=Saabএকটি স্ট্রিং হিসাবে শেষ হয়, তবে ?cars[]=Saabএকক উপাদান সহ একটি অ্যারে ray
ট্রেভর ডিকসন

5
আপনি এই পদ্ধতির ব্যবহার করে কীগুলি সেট করতে পারেন? এবং বহুমাত্রিক অ্যারে সম্পর্কে কি?
কিওয়ার্টি

5
এএসপি.এনইটি এমভিসি ফর্ম্যাটটি পড়তে উপস্থিত ?cars[]=Saab&cars[]=Audiহয় না হয় স্কোয়ার ব্র্যাকেট নেই বা বর্গাকার বন্ধনীগুলির সূচকের প্রয়োজন /
মিঃ ফ্লিবল

37

একটি ক্যোয়ারী স্ট্রিংটিতে পাঠ্যগত ডেটা বহন করে তাই অ্যারেটি বিস্ফোরিত করা, এটি সঠিকভাবে এনকোড করা এবং এটি আপনার পছন্দের উপস্থাপনামূলক বিন্যাসে পাস করার বিকল্প নেই:

p1=value1&pN=valueN...
data=[value1,...,valueN]
data={p1:value1,...,pN:valueN}

এবং তারপরে এটি আপনার সার্ভারের পাশের কোডে ডিকোড করুন।


ঠিক আছে স্পষ্টির জন্য ধন্যবাদ। আপনি কি আমার সংশোধিত প্রশ্নটি দেখতে পাচ্ছেন- কীগুলির জন্য পি 1 ... পিএন করা দরকার, নাকি আমি কেবল একাধিক কীগুলির নাম 'পি' রাখতে পারি, এবং সেভাবে আমি জানতে পারি যে তারা সবাই একই অ্যারেভুক্ত?
ইয়ারিন

1
আপনি একই নাম ব্যবহার করতে পারেন; stackoverflow.com/questions/2203430/… বা কেবল পি = এএ, বিবি, সিসি যা সেরোডিস মন্তব্য হিসাবে সর্বাধিক সুস্পষ্ট উপায়।
অ্যালেক্স কে।

সঙ্গে খুব দরকারী JSON.stringifyএবং JSON.parse!
চার্লিবার্বোনি

1
একটি সাধারণ এবং সাধারণ প্রতিনিধিত্বমূলক ফর্ম্যাটটি হল JSON, পিএইচপি তে json_encodeতখন rawurlencodeএবং json_decodeঅন্য পৃষ্ঠায় ব্যবহার করে ।
এডওয়ার্ড

20

আমি মনে করি না একটি মান আছে।
প্রতিটি ওয়েব পরিবেশ এই জাতীয় জিনিসগুলির জন্য নিজস্ব 'স্ট্যান্ডার্ড' সরবরাহ করে। তদ্ব্যতীত, ইউআরএল সাধারণত যে কোনও কিছুর জন্য খুব ছোট (কিছু ব্রাউজারে 256 বাইটের সীমা)। অবশ্যই দীর্ঘতর অ্যারে / ডেটা পোস্টের অনুরোধের সাথে প্রেরণ করা যায়।

তবে কিছু পদ্ধতি রয়েছে:

  1. পিএইচপি উপায় আছে, যা ইউআরএল কোয়েরিতে স্কোয়ার বন্ধনী ( [, ]) ব্যবহার করে । উদাহরণস্বরূপ, একটি কোয়েরি যেমন ?array_name[]=item&array_name[]=item_2কাজ করার কথা বলা হয়েছে, খারাপ ডকুমেন্ট হওয়া সত্ত্বেও, পিএইচপি স্বয়ংক্রিয়ভাবে এটিকে অ্যারে রূপান্তরিত করে। সূত্র: https://stackoverflow.com/a/9547490/3787376

  2. অবজেক্ট ডেটা-ইন্টারচেঞ্জ ফর্ম্যাটগুলি (যেমন জেএসএন - অফিসিয়াল ওয়েবসাইট , পিএইচপি ডকুমেন্টেশন ) যদি জেএসওনের মতো স্ট্রিংগুলিতে এবং স্ট্রিংগুলিতে রূপান্তর করার পদ্ধতি থাকে তবে তাদের ব্যবহার করা যেতে পারে।
    এছাড়াও একটি url-encoder (বেশিরভাগ প্রোগ্রামিং ভাষার জন্য উপলভ্য) প্রয়োজন HTTP স্ট্রিং ডেটা সঠিকভাবে এনকোড করার জন্য অনুরোধ পেতে।

যদিও "বর্গাকার বন্ধনী পদ্ধতি" সহজ এবং কাজ করে তবে এটি পিএইচপি এবং অ্যারেতে সীমাবদ্ধ।
যদি অন্যান্য ধরণের ভেরিয়েবল যেমন ক্লাস বা পিএইচপি ব্যতীত কোনও ভাষাতে কোয়েরি স্ট্রিংয়ের মধ্যে ভেরিয়েবলগুলি পাস করার প্রয়োজন হয়, JSON পদ্ধতিটি সুপারিশ করা হয়।

জেএসএন পদ্ধতির পিএইচপি উদাহরণ (পদ্ধতি 2):

$myarray = array(2, 46, 34, "dfg");
$serialized = json_encode($myarray)
$data = 'myarray=' . rawurlencode($serialized);
// Send to page via cURL, header() or other service.

পৃষ্ঠা প্রাপ্তির জন্য কোড (পিএইচপি):

$myarray = json_decode($_GET["myarray"]); // Or $_POST["myarray"] if a post request.

1
এক্সপ্রেস.জেএস 4.13.4-তে পরীক্ষিত বর্গক্ষেত্র বন্ধনীর চিহ্নও সমর্থন করে।
স্টিভ কেহলেট

7

আমি মনে করি যে এটি সার্ভারলেটে কোয়েরি স্ট্রিংয়ে অ্যারে পাস করার জন্য খুঁজছেন এমন কারও পক্ষে সহায়ক হবে। আমি কোয়েরি স্ট্রিংয়ের নীচে পরীক্ষা করেছি এবং req.getgetParameterValues ​​() ব্যবহার করে অ্যারের মান পেতে সক্ষম হয়েছি; পদ্ধতি। নীচে আমি ব্রাউজারটি দিয়ে পাস করেছি ক্যোরিয় স্ট্রিং।

  http://localhost:8080/ServletsTutorials/*.html? 
  myname=abc&initial=xyz&checkbox=a&checkbox=b

চেকবক্সটি এখানে আমার প্যারামিটার অ্যারে।


5

এটি আমার পক্ষে কাজ করে:

লিঙ্কে, বৈশিষ্ট্যটির মান রয়েছে:

to="/filter/arr?fruits=apple&fruits=banana"

রুট এটি পরিচালনা করতে পারে:

path="/filter/:arr"

একাধিক অ্যারে জন্য:

to="filter/arr?fruits=apple&fruits=banana&vegetables=potato&vegetables=onion"

রুট একই থাকে।

SCREENSHOT

এখানে চিত্র বর্ণনা লিখুন


2

আপনি আপনার প্রশ্নে পিএইচপি এবং জাভাস্ক্রিপ্ট উল্লেখ করেছেন, তবে ট্যাগগুলিতে নয়। এমভিসি.নেট অ্যাকশনটিতে অ্যারে পাস করার অভিপ্রায় নিয়ে আমি এই প্রশ্নটিতে পৌঁছেছি।

আমি আমার প্রশ্নের উত্তরটি এখানে পেয়েছি : প্রত্যাশিত ফর্ম্যাটটি আপনি আপনার প্রশ্নের প্রস্তাব করেছিলেন এমন একাধিক প্যারামিটারের একই নাম রয়েছে।


2
যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে।
অ্যান্ড্রু

@ এন্ড্রু এটি কোনও উত্তর নয়। "প্রত্যাশিত ফর্ম্যাটটি আপনি আপনার প্রশ্নের প্রস্তাব করেছিলেন এমন একাধিক প্যারামিটারের একই নাম রয়েছে" "
ডিসিএসনন

2

আমি প্রতিক্রিয়া এবং রেলগুলি ব্যবহার করি। আমি করেছিলাম:

JS

  let params = {
    filter_array: ['A', 'B', 'C']
  }

  ...

  //transform params in URI

  Object.keys(params).map(key => {
    if (Array.isArray(params[key])) {
      return params[key].map((value) => `${key}[]=${value}`).join('&')
    }
  }
  //filter_array[]=A&filter_array[]=B&filter_array[]=C

1

তুমি ব্যবহার করতে পার পিএইচপি-তে একটি অ্যারে থেকে URL- এনকোডেড ক্যোরিস্টিং জেনারেট http_build_query । ফলাফলের ক্যোয়ারস্ট্রিং প্রসারিত হবে, আপনি http_build_queryপদ্ধতির পরামিতি হিসাবে আপনি যে অনন্য বিভাজক চান তার বিষয়ে সিদ্ধান্ত নিতে পারেন , তাই ডিকোডিংয়ের ক্ষেত্রে, আপনি কী বিভাজকটি ব্যবহার করেছেন তা পরীক্ষা করতে পারেন। যদি এটি আপনি যে অনন্যটি বেছে নিয়েছিলেন, তা হলে এটি অ্যারে ক্যোরিস্ট্রিং হত অন্যথায় এটি সাধারণ ক্যোরিস্ট্রিংগুলি হত।


1

যদিও ইউআরএল অংশে কোনও মান নেই, জাভাস্ক্রিপ্টের জন্য একটি মান আছে। আপনি যদি অ্যারেযুক্ত বস্তুগুলিকে এতে পাস করেন URLSearchParamsএবং এতে কল toString()করেন, এটি এটিকে আইটেমের কমা দ্বারা পৃথক করা তালিকায় রূপান্তরিত করবে:

let data = {
  str: 'abc',
  arr: ['abc', 123]
}

new URLSearchParams(data).toString();  # ?str=abc&arr=abc,123

0

Http://php.net/manual/en/function.parse-str.phpparse_string ফাংশনটি পরীক্ষা করুন

এটি অ্যারে সহ কোয়েরি স্ট্রিং থেকে সমস্ত ভেরিয়েবল ফিরিয়ে দেবে।

পিএইচপিএন থেকে উদাহরণ:

<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.