我有以下格式的URL:
https://www.example.com/page?=item1&item2&item3&item4&item5
我需要将每个项目都放入一个变量中,就像这样:
protected void onActivityResult(int requestCode, int resultCode, @Nullable
URL中实际上没有说出item1,item2等,它们的实际值每次都不同。
有人知道该怎么做吗?
谢谢!
答案 0 :(得分:1)
您的示例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
。 (请注意删除=
。)
如果给定的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字符串,则可以使用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
,您可以将其更改回数组