2009-12-02 8 views
35

क्या $_GET में एक सरणी के रूप में मूल्य होना संभव है?

यदि मैं http://link/foo.php?id=1&id=2&id=3 के साथ एक लिंक भेजने की कोशिश कर रहा हूं, और मैं php पक्ष पर $_GET['id'] का उपयोग करना चाहता हूं, तो यह मान सरणी कैसे हो सकता है? क्योंकि अभी echo $_GET['id']3 लौटा रहा है। यह अंतिम आईडी है जो हेडर लिंक में है। कोई सुझाव?

उत्तर

86

PHP में यह करने के लिए हमेशा की तरह सिर्फ id के बजाय अपने URL में id[] डाल करने के लिए है:

http://link/foo.php?id[]=1&id[]=2&id[]=3 

फिर $_GET['id'] उन मूल्यों की एक सरणी हो जाएगा। यह विशेष रूप से सुंदर नहीं है, लेकिन यह बॉक्स से बाहर काम करता है।

+0

यह आमतौर पर ऐसा करने का तरीका है, लेकिन आप फॉर्म को बदलने के अनुरोध को संसाधित कर सकते हैं (QueryString का उपयोग करके नीचे मेरी प्रतिक्रिया देखें) – ChronoFish

+0

क्या यह पोस्ट के लिए भी काम करेगा? –

+0

@ दांतेमेन हां, यह POST अनुरोधों के लिए भी काम करता है। यदि आप एक फॉर्म पोस्ट कर रहे हैं तो आपको इस तरह के इनपुट की आवश्यकता होगी: '<इनपुट नाम =" आईडी [] "/><इनपुट नाम =" आईडी [] "/> ... '(नीचे लुकास' उदाहरण देखें)। –

2

मुझे लगता है कि मुझे पता है तुम क्या मतलब है, अगर आप आप serialize

उदाहरण के लिए

उपयोग कर सकते हैं एक यूआरएल के माध्यम से एक सरणी भेजना चाहते हैं:

$foo = array(1,2,3); 
$serialized_array = serialize($foo); 
$url = "http://www.foo.com/page.php?vars=".$foo; 

और page.php पर

$vars = unserialize($_GET['vars']); 
21

आप id को अल्पविराम से अलग मूल्यों की एक श्रृंखला बना सकते हैं, जैसे:

index.php?id=1,2,3&name=john

फिर, अपने PHP कोड के भीतर, यह एक सरणी में विस्फोट:

$values = explode(",", $_GET["id"]); 
print count($values) . " values passed."; 

यह संक्षिप्तता बनाए रखेगा। अन्य (अधिक सामान्यतः $ _POST के साथ इस्तेमाल किया) विधि सरणी शैली वर्ग कोष्ठकों का उपयोग करने के लिए है:

index.php?id[]=1&id[]=2&id[]=3&name=john

लेकिन वह स्पष्ट रूप से और अधिक वर्बोज़ होगा।

18

आप अपने HTML में एक सरणी इस तरह से निर्दिष्ट कर सकते हैं:

array(
    'id' => array(
    0 => 1, 
    1 => 2, 
    2 => 3 
) 
) 
बेशक

, आप HTML किसी भी प्रकार का उपयोग कर सकते हैं:

<input type="hidden" name="id[]" value="1"/> 
<input type="hidden" name="id[]" value="2"/> 
<input type="hidden" name="id[]" value="3"/> 

यह PHP में इस $ _GET सरणी में परिणाम होगा इनपुट, यहाँ। महत्वपूर्ण बात यह है कि 'आईडी' सरणी में जिन मानों को आप चाहते हैं वे सभी नाम id[] हैं।

6

आप लिंक (जैसे foo.php?id=1&id=2&id=3) आप शायद कुछ इस तरह कर सकता है परिवर्तित करने के लिए नहीं चाहते हों (एक बेहतर तरीका है, हालांकि हो सकता है ...):

$id_arr = array(); 
foreach (explode("&", $_SERVER['QUERY_STRING']) as $tmp_arr_param) { 
    $split_param = explode("=", $tmp_arr_param); 
    if ($split_param[0] == "id") { 
     $id_arr[] = urldecode($split_param[1]); 
    } 
} 
print_r($id_arr); 
+1

+1, यह निश्चित रूप से अधिक त्रुटि जांच आदि की आवश्यकता है। आपको '$ _SERVER ['QUERY_STRING']' 'और 'urldecode()' पैरामीटर का उपयोग करना चाहिए यदि इसमें मज़ेदार वर्ण हैं ... लेकिन मुझे जुनून के साथ PHP के '[]' से नफरत है, इसलिए मैंने वास्तव में इस तरह एक समारोह लिखा है। – mercator

+0

अच्छा अंक, धन्यवाद – ChristopheD

15

आप का उपयोग कर उन्हें प्राप्त कर सकते हैं क्वेरी स्ट्रिंग:

$idArray = explode('&',$_SERVER["QUERY_STRING"]); 

यह आपको दे देंगे:

$idArray[0] = "id=1"; 
$idArray[1] = "id=2"; 
$idArray[2] = "id=3"; 

फिर

foreach ($idArray as $index => $avPair) 
{ 
    list($ignore, $value) = explode("=", $avPair); 
    $id[$index] = $value; 
} 

यह आपको

$id[0] = "1"; 
$id[1] = "2"; 
$id[2] = "3"; 
दे देंगे
3

रखो सब एक चर में आईडी $ आईडी कहा जाता है और उनके साथ एक "" अलग:

$ids = "1,2,3,4,5,6"; 

उन्हें इतनी तरह दर्रा:

$url = "?ids={$ids}"; 

प्रक्रिया उन्हें:

$ids = explode(",", $_GET['ids']); 
0

हां, यहां टिप्पणियों में कुछ स्पष्टीकरण के साथ एक कोड उदाहरण है:

<?php 
// Fill up array with names 

$sql=mysql_query("SELECT * FROM fb_registration"); 
while($res=mysql_fetch_array($sql)) 
{ 


    $a[]=$res['username']; 
//$a[]=$res['password']; 
} 

//get the q parameter from URL 
$q=$_GET["q"]; 

//lookup all hints from array if length of q>0 

if (strlen($q) > 0) 
    { 
    $hint=""; 
    for($i=0; $i<count($a); $i++) 
    { 
    if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q)))) 
     { 
     if ($hint=="") 
     { 
     $hint=$a[$i]; 
     } 
     else 
     { 
     $hint=$hint." , ".$a[$i]; 
     } 
     } 
    } 
    } 
?> 
-3
$url = 'http://link/foo.php?id=1-2-3'; 
$id = explode('-', $url); 
echo $id[0]; 
echo $id[1]; 
echo $id[2]; 
+1

क्या आप अपना उत्तर समझा सकते हैं? – Rico

संबंधित मुद्दे