Как получить массив PHP $ _GET?

Возможно ли иметь значение в $_GET как массив?

Если я пытаюсь отправить ссылку с http://link/foo.php?id=1&id=2&id=3 , и я хочу использовать $_GET['id'] на стороне php, как это значение может быть массив? Потому что прямо сейчас echo $_GET['id'] возвращает 3 . Его последний идентификатор находится в заголовке. Какие-либо предложения?

Обычный способ сделать это в PHP – это поставить id[] в свой URL вместо простого id :

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

Тогда $_GET['id'] будет массивом этих значений. Это не особенно красиво, но это работает из коробки.

Вы можете сделать 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

Но это явно было бы гораздо более подробным.

Вы можете указать массив в своем HTML следующим образом:

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

Это приведет к этому массиву $ _GET в PHP:

 array( 'id' => array( 0 => 1, 1 => 2, 2 => 3 ) ) 

Конечно, здесь вы можете использовать любой вид HTML-ввода. Важно то, что все входы, значения которых вы хотите в массиве id, имеют имя id[] .

Вы можете получить их с помощью строки запроса:

 $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"; 

Если вы не хотите изменять ссылку (например, 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); 

См. Как создать массивы в HTML <form> ? в FAQ по PHP и HTML .

Поместите все идентификаторы в переменную, называемую $ ids, и разделите ее на «,»:

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

Передайте их так:

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

Обработать их:

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

Я думаю, что я знаю, что вы имеете в виду, если вы хотите отправить массив через URL-адрес, вы можете использовать сериализацию

например:

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

и на стр ..php

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

Да, вот пример кода с некоторым объяснением в комментариях:

 <?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]; } } } } ?> в <?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]; } } } } ?> 
 $url = 'http://link/foo.php?id=1-2-3'; $id = explode('-', $url); echo $id[0]; echo $id[1]; echo $id[2];