检查以简洁的方式设置哪些参数 - PHP

时间:2017-08-14 17:22:37

标签: php url parameters

我需要从具有不同名称的url获取许多参数,并检查它们是否已设置。 (他们的价值并不一定重要)。

https://example.com?one=true&two=true&three=true      etc.

问题在于我想做什么,其中任何一个都可以设置。

所以我需要一种方法的帮助,以获取它们中的哪些在url中并以干净的方式设置,并且最好存储在与参数名称匹配的不同变量中,而不是具有多个$_GETisset()行,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中,具有相同的名称。

3 个答案:

答案 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)