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

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

39 голосов
/ 02 декабря 2009

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

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

Ответы [ 9 ]

92 голосов
/ 02 декабря 2009

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

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

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

24 голосов
/ 02 декабря 2009

Вы можете сделать 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 голосов
/ 02 декабря 2009

Вы можете указать массив в своем 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[].

15 голосов
/ 02 декабря 2009

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

$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";
6 голосов
/ 02 декабря 2009

Если вы не хотите менять ссылку (например, 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);
4 голосов
/ 02 декабря 2009
3 голосов
/ 01 мая 2012

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

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

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

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

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

$ids = explode(",", $_GET['ids']);
3 голосов
/ 02 декабря 2009

Я думаю, я знаю, что вы имеете в виду, если вы хотите отправить массив через URL, вы можете использовать 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']);
0 голосов
/ 29 января 2013

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

<?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];
        }
      }
    }
  }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...