从URL获取数组

时间:2019-01-26 19:23:33

标签: php

我有以下格式的URL:

https://www.example.com/page?=item1&item2&item3&item4&item5

我需要将每个项目都放入一个变量中,就像这样:

protected void onActivityResult(int requestCode, int resultCode, @Nullable 

URL中实际上没有说出item1,item2等,它们的实际值每次都不同。

有人知道该怎么做吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

URL查询字符串/ GET参数

您的示例URL https://www.example.com/page?=item1&item2&item3&item4&item5格式错误。以以下格式解析问号?之后的查询字符串:

name1=value1&name2=value2...

您的URL意味着:

<empty name> = item1
item2        = ''
item3        = ''
...

当PHP解析GET参数时,空名称将被忽略。

让我们假设您有一个URL https://www.example.com/page?item1&item2&item3&item4&item5。 (请注意删除=。)

访问GET参数

如果给定的URL是您的PHP当前脚本之一,则可以使用预初始化的全局变量$_GET轻松访问GET参数。试试var_dump($_GET),您会得到:

array (size=5)
  'item1' => string '' (length=0)
  'item2' => string '' (length=0)
  'item3' => string '' (length=0)
  'item4' => string '' (length=0)
  'item5' => string '' (length=0)

如您所见,item1 ... item5是关联数组的键,每个键都有一个空字符串''作为默认值,因为您没有设置任何item1=the+item

将键作为数组获取

要更接近问题标题中指定的需求,可以使用array_keys提取密钥:

$url_keys = array_keys($_GET);

现在您有一个像这样的数组:

array (size=5)
  0 => string 'item1' (length=5)
  1 => string 'item2' (length=5)
  2 => string 'item3' (length=5)
  3 => string 'item4' (length=5)
  4 => string 'item5' (length=5)

提取为变量

我不建议将任何变化的数据结构提取到您的变量范围中。请注意,客户端甚至可以操纵该请求,从而向您发送您不期望的内容。当您不完全知道所得到的内容时,很难找到变量名。最好对数组进行操作。

但是,如果您确实需要将键导入变量范围,则可以使用以下方法来实现。 PHP确实提供了一种功能extract,可以通过多种方式来实现。我们想使用带有前缀的数字索引成为变量名:

extract(array_keys($_GET), EXTR_PREFIX_ALL, 'var');

结果将是:

$var_0 = item1,
$var_1 = item2

基于零的编号是由于以下事实:默认情况下,数组是基于零的无核数,因此从函数array_keys返回的数组。

要获得问题中所示的编号,您还可以对键数组重新编号。

extract(array_combine(range(1, count($_GET)),array_keys($_GET)), EXTR_PREFIX_ALL, 'var');

如果您对名称中的下划线感到不满意,还可以在相当简单的循环中使用动态变量创建来提取键:

foreach (array_keys($_GET) as $k => $v)
  ${'var'. ($k+1)} = $v;

如果要使用全局变量,请使用

foreach (array_keys($_GET) as $k => $v)
  $GLOBALS['var'. ($k+1)] = $v;

从任意URL提取密钥

如果必须从某个位置分析URL字符串,则可以使用parse_url函数首先提取查询,然后使用parse_str来解析查询,其方式与PHP自动执行的方式相同启动时构建$_GET关联数组时脚本的URL。

parse_str(parse_url($url, PHP_URL_QUERY), $params);

$params现在是

array (size=5)
  'item1' => string '' (length=0)
  'item2' => string '' (length=0)
  'item3' => string '' (length=0)
  'item4' => string '' (length=0)
  'item5' => string '' (length=0)

您可以使用$_GET数组以与上面所示相同的方式处理该问题。

答案 1 :(得分:0)

您可以尝试

$var1 = $_GET['item1'];
$var2 = $_GET['item2'];
$var3 = $_GET['item3'];
$var4 = $_GET['item4'];
$var5 = $_GET['item5'];

所有URL变量都存储在GET数组中

答案 2 :(得分:0)

我不确定您的URL格式...

但是,正如这里已经回答的那样,您可以使用$_GET['item1']等提取每个参数(如果按名称指定)...

并且,如果存在其他格式或未知数量的值,则可以使用$_SERVER['REQUEST_URI']来获取整个URL,从而得到整个字符串:

/page?=item1&item2&item3&item4&item5

然后,使用分隔符&拆分该字符串,假定每个拆分的子字符串都是URL数组(?)中某个项目的值。

答案 3 :(得分:0)

正如您所说,您想在URL中获取所有参数。

实际上,$ _ GET已经是一个您也可以使用的数组。但是,当您要创建自己的数组/变量列表时,这也是可能的。

为此,您可以使用超级全局segRgb,这是一个包含每个URL参数的数组。

例如,我为您编写了此代码

$_GET

当我访问页面(http://example.com/temp.php?a&b)时,将显示

  

array(2){[“ a”] =>字符串(0)“” [“ b”] =>字符串(0)“”}数组(2){[“ a”] =>字符串(0 )“” [“ b”] =>字符串(0)“”}

如您所见,它具有相同的数据。而且,因为您说值和键(file.php?key = value)可能不同,所以我建议您使用数组。

因此,您还可以将它们保存为JSON之类的格式,以将它们轻松地保存在数据库中,以便以后使用。

当我在其中一个数组上使用<?php $return = []; foreach($_GET as $key => $value) { $return[$key] = $value; } var_dump($_GET); var_dump($return); ?> 时,会给我一个可以使用的字符串。

  

{“ a”:“”,“ b”:“”}

通过json_encode,您可以将其更改回数组