我需要从具有不同名称的url获取许多参数,并检查它们是否已设置。 (他们的价值并不一定重要)。
https://example.com?one=true&two=true&three=true etc.
问题在于我想做什么,其中任何一个都可以设置。
所以我需要一种方法的帮助,以获取它们中的哪些在url中并以干净的方式设置,并且最好存储在与参数名称匹配的不同变量中,而不是具有多个$_GET
和isset()
行,if
语句遍布各处。
编辑:提交一个始终存在于URL中的参数:我认为这可以使用foreach循环完成。
if (isset($_GET['submit'])) {
foreach ($_GET as $key => $value) {
$key = $value;
echo $key;
}
}
这将回显$ key的值,(这是我所需要的,因为我知道它已设置),但是我需要获取$ key设置的实际名称。
由于
编辑2: 我已经找到了如何做到这一点 - 我需要的只是获取网址中的参数并知道它们的名称。对不起,如果我措辞得很好。
if (isset($_GET['submit'])) {
foreach ($_GET as $key => $value) {
$$value = $key;
echo $key;
}
}
我发现使用变量变量是我需要的(因此2 $$) 最后,这给了我$ key作为url中任何参数的名称,存储在$ value中,具有相同的名称。
答案 0 :(得分:1)
您需要使用extract()
从数组中提取所有键并将其视为变量
从数组
将变量导入当前符号表
这是一个小例子:
$_GET['var_1'] = 1;
$_GET['var_2'] = 2;
$_GET['var_3'] = '';
extract($_GET);
echo $var_1;
使用以下代码获取空以及设置键/值:
$newArray = array_filter($_GET);
$sub_key = array_keys($newArray);
print_r($sub_key); // this will give you all keys that have values
$sub_values = array_values($newArray);
print_r(array_diff($_GET, $sub_values)); // all keys that have empty values
答案 1 :(得分:0)
如果有可能存在密钥,那么有一个可以进行检查和返回的类/功能是有帮助的。框架可能会起到这样的作用:
class Request
{
public static function getGet($key=false)
{
if(!empty($key))
return (isset($_GET[$key]))? $_GET[$key] : false;
return $_GET;
}
public static function getPost($key=false)
{
if(!empty($key))
return (isset($_POST[$key]))? $_POST[$key] : false;
return $_POST;
}
}
# Would try to retrieve $_GET['one']
$val1 = Request::getGet('one');
# Would try to retrieve $_POST['two']
$val2 = Request::getPost('two');
我不会创建动态变量,因为您仍然需要检查它们是否已设置或等等。根据用途和PHP版本,您可以:
if(Request::getGet('whatever')) {
# Do something
}
答案 2 :(得分:0)
您可以通过查看$_GET
$expected_parameters = ['one', 'two', 'three'];
if(count(array_intersect($expected_parameters, array_keys($_GET))) !== count($expected_parameters)) {
// Failed validation
}
这将验证所有必需的参数是否存在,但它不能确保它们不是空的。我建议进行进一步的验证,以确保参数是所需的类型,但在你的问题中,你说这不是一个要求。
要将参数输入到自己的变量中,您可以使用extract()
。
extract($_GET)