Как получить массив PHP $_GET?
Возможно ли иметь значение в $_GET
как массив?
Если я пытаюсь отправить ссылку с http://link/foo.php?id=1&id=2&id=3
, и я хочу использовать $_GET['id']
на стороне php, как это значение может быть массивом? Потому что прямо сейчас echo $_GET['id']
возвращает 3
. Его последний идентификатор находится в заголовке. Любые предложения?
Ответы
Ответ 1
Обычным способом сделать это в PHP является размещение id[]
в вашем URL, а не только id
:
http://link/foo.php?id[]=1&id[]=2&id[]=3
Тогда $_GET['id']
будет массивом этих значений. Это не особенно красиво, но это работает из коробки.
Ответ 2
Вы можете сделать 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
Но это явно было бы намного более подробным.
Ответ 3
Вы можете указать массив в своем 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[]
.
Ответ 4
Вы можете получить их с помощью строки запроса:
$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";
Ответ 5
Если вы не хотите менять ссылку (например, 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);
Ответ 6
См. Как создать массивы в HTML <form>
? в FAQ по PHP и HTML.
Ответ 7
Поместите все идентификаторы в переменную с именем $ids и разделите их на ",":
$ids = "1,2,3,4,5,6";
Передайте их так:
$url = "?ids={$ids}";
Обработать их:
$ids = explode(",", $_GET['ids']);
Ответ 8
Я думаю, что знаю, что вы имеете в виду, если вы хотите отправить массив через URL-адрес, вы можете использовать serialize
например:
$foo = array(1,2,3);
$serialized_array = serialize($foo);
$url = "http://www.foo.com/page.php?vars=".$foo;
и на странице. php
$vars = unserialize($_GET['vars']);
Ответ 9
Да, вот пример кода с некоторым объяснением в комментариях:
<?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];
}
}
}
}
?>
Ответ 10
$url = 'http://link/foo.php?id=1-2-3';
$id = explode('-', $url);
echo $id[0];
echo $id[1];
echo $id[2];