PHP में query string में array कैसे भेजें: पूरी गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

URL में array क्यों भेजें? और यह उतना आसान क्यों नहीं है जितना लगता है?

\n

सोचिए: आप PHP में किसी ई-कॉमर्स साइट के लिए प्रोडक्ट फ़िल्टर बना रहे हैं। यूज़र कई कैटेगरी, कई रंग और प्राइस रेंज चुनता है। GET रिक्वेस्ट के ज़रिए यह सारा डेटा सर्वर पर कैसे भेजें? आसान तरीका है — ?category=1&category=2&category=3। लेकिन सर्वर सिर्फ़ आखिरी वैल्यू ही देखेगा, जब तक आप कोई ट्रिक न अपनाएँ।

\n

Stack Overflow पर सवाल "How to pass an array within a query string?" को हज़ारों बार देखा जा चुका है। डेवलपर्स रोज़ इसी पर अटकते हैं। आज हम इस टॉपिक को शुरू से अंत तक समझेंगे: दिखाऊँगा कि URL के ज़रिए array को सही तरीके से कैसे भेजें, सर्वर पर इसे कैसे प्रोसेस करें, और किन-किन गलतियों से बचना है।

\n

तैयार हैं GET पैरामीटर्स को एक स्ट्रक्चर्ड डेटा में बदलने के लिए? चलिए शुरू करते हैं!

\n\n

बेसिक्स: PHP query string को कैसे प्रोसेस करता है

\n

जब आप GET रिक्वेस्ट भेजते हैं, तो PHP अपने आप सुपरग्लोबल array $_GET को भर देता है। अगर URL में ?name=John&age=25 है, तो $_GET कुछ इस तरह दिखेगा:

\n
array(2) {\n  ["name"] => string(4) "John"\n  ["age"] => string(2) "25"\n}
\n

लेकिन क्या होगा अगर हम एक ही key के साथ कई वैल्यू भेजें? URL लिखें: ?color=red&color=green&color=blue। सर्वर सिर्फ़ color=blue ही पाएगा। बाकी वैल्यू ओवरराइट हो जाएँगी, क्योंकि PHP को नहीं पता कि डुप्लीकेट keys के साथ क्या करना है।

\n

यहाँ पर square brackets syntax काम आता है, जो इसी समस्या के लिए बनाया गया है।

\n\n

तरीका #1: square brackets syntax (सबसे लोकप्रिय)

\n

पैरामीटर के नाम में square brackets जोड़ें: color[]। जब PHP यह पैटर्न देखता है, तो अपने आप एक array बना देता है। URL का उदाहरण:

\n
?color[]=red&color[]=green&color[]=blue
\n

सर्वर पर $_GET में यह होगा:

\n
array(1) {\n  ["color"] => array(3) {\n    [0] => string(3) "red"\n    [1] => string(5) "green"\n    [2] => string(4) "blue"\n  }\n}
\n

अब PHP कोड का उदाहरण जो इसे प्रोसेस करता है:

\n
<?php\n// URL: example.com?color[]=red&color[]=green&color[]=blue\nif (isset($_GET['color']) && is_array($_GET['color'])) {\n    echo "चुने गए रंग:<br>";\n    foreach ($_GET['color'] as $index => $color) {\n        echo ($index + 1) . ". " . htmlspecialchars($color) . "<br>";\n    }\n}\n?>
\n

ब्राउज़र में रिज़ल्ट:

\n
चुने गए रंग:\n1. red\n2. green\n3. blue
\n\n

नामांकित keys: जब ऑर्डर मायने नहीं रखता

\n

कभी-कभी associative array (key → value) भेजना होता है। इसके लिए key[] सिंटैक्स में key का नाम दें:

\n
?filter[category]=books&filter[price]=100&filter[in_stock]=1
\n

PHP इसे ऐसे बदलेगा:

\n
array(1) {\n  ["filter"] => array(3) {\n    ["category"] => string(5) "books"\n    ["price"] => string(3) "100"\n    ["in_stock"] => string(1) "1"\n  }\n}
\n

सर्वर पर प्रोसेसिंग:

\n
<?php\nif (isset($_GET['filter'])) {\n    $filter = $_GET['filter'];\n    $query = "SELECT * FROM products WHERE 1=1";\n    if (!empty($filter['category'])) {\n        $query .= " AND category = '" . mysqli_real_escape_string($conn, $filter['category']) . "'";\n    }\n    if (!empty($filter['price'])) {\n        $query .= " AND price <= " . (int)$filter['price'];\n    }\n    // ... बाकी शर्तें\n}\n?>
\n\n

तरीका #2: query string में JSON (एडवांस्ड)

\n

अगर array जटिल है (मल्टी-लेवल नेस्टेड), तो square brackets syntax भारी हो जाता है। इसका विकल्प है — URL-एन्कोडेड JSON स्ट्रिंग भेजना।

\n

क्लाइंट (JavaScript) पर URL बनाएँ:

\n
const data = {\n    colors: ['red', 'green', 'blue'],\n    sizes: ['S', 'M', 'L'],\n    options: {\n        gift_wrap: tr                

ब्लॉग

पुस्तक अनुशंसाएँ