是否有一种快捷方法可以将$_GET['values']
分配给变量?
我目前和其他人一样:
if(isset($_GET['type'],$_GET['case'])
$type = $_GET['type'];
$case = $_GET['case'];
是否有更简洁的方法来执行此操作,而不是单独执行以下操作。
$type = $_GET['type'];
$case = $_GET['case'];
答案 0 :(得分:4)
我能想到的唯一一行代码,以确保您仍然进行必要的检查,
$type = (isset($_GET['type'])) ? $_GET['type'] : 'a default value or false';
阅读评论,我知道您可能想要这样做:
foreach($_GET as $key=>$value) {
$$key = $value;
}
我建议不要只是初始化你需要的变量。上面的代码将导致获取未知变量,这实际上可以为用户提供操作脚本的方法 例如:
index.php?ExpectedVar=1&UserDefinedVar=2
将在您的代码中生成以下变量:
$ExpectedVar // 1 <- you wanted this one
$UserDefinedVar // 2 <- but what about this?
如果您通过其他脚本调用此脚本该怎么办? 然后,即使您的文件顶部有此代码,也可能会从用户定义的$ _GET中覆盖一些变量!
灾难案例场景:
script1.php
<?php
$tableToDelete = "old_products";
include("script2.php");
?>
script2.php
<?php
foreach($_GET as $key=>$value) {
$$key = $value;
}
// user added &tableToDelete=users
// DROP TABLE $table
// will gloriously delete users
?>
相反,通过使用我发布的原始代码写几行,您可以在php脚本的开头获取所需的变量,并清楚地使用它们。
答案 1 :(得分:4)
我认为你正在寻找extract
功能。
extract($_GET); //now, all of the functions are in current symbol table
答案 2 :(得分:4)
好吧,使用数组映射,您可以获得case
不仅一次,而且可以同时获取,同时您也可以同时检查isset()
和empty()
。
假设您有以下网址:read.php?id=1&name=foo&job=student&country=Brazil
您的问题是提取$_GET
类型,您可能需要检查它是empty/isset
还是不对?
好吧,首先你创建一个迭代它的函数。
function checkGet($val){
return (isset($val) && !empty($val)) ? $val : null;
}
然后,使用array_map()
$check = array_map('checkGet', $_GET);
就是这样!
如果您现在要var_dump($check);
,那么您将获得所有类型和值:
array (size=4)
'id' => string '1' (length=1)
'name' => string 'foo' (length=3)
'job' => string 'student' (length=7)
'country' => string 'Brazil' (length=6)
意思是,在此之后,执行的操作:
if(isset($_GET['something']) && !empty($_GET['something']))
$var = $_GET['something'];
echo $var;
只是做:
echo $check['something']
答案 3 :(得分:1)
尝试
foreach($_GET as $key=>$value) {
$get_arr[$key] = $_GET[$key];
}
print_r($get_arr);
答案 4 :(得分:0)
我会这样做,这样你就可以确保它只会返回TRUE或FALSE
if (!isset($_GET['type']) || empty($_GET['type'])) {
// Display error
} else {
$type = $_GET['type'];
$case = $_GET['case'];
}
或者你也可以这样做
$type = (isset($_GET['type'])===false)?'':trim($_GET['type']);
$case = (isset($_GET['case'])===false)?'':trim($_GET['case']);
答案 5 :(得分:0)
$ _ GET是表格,因此您可以轻松使用foreach函数
例如
foreach ($_GET as $key => $value) {
... = $value;
}
如果您想使用$ key names创建变量,请使用变量变量 PHP Manual Variable Variables
答案 6 :(得分:0)
您可以通过extract()
extract($_GET, EXTR_PREFIX_ALL, 'g');
这样
$_GET['val']
变为$g_val
请注意第三个参数:g
它会将g_
添加到键中。
答案 7 :(得分:0)
这个(未经测试的)课程可以帮助你:
class MyGet {
public static $myValues = array();
public static function setMyValues($keywords, $where) {
MyGet::$myValues = array();
for ($index = 0; $index < count($keywords); $index++) {
if ((!(isset($where[$keywords[$index]]))) || (empty($where[$keywords[$index]]))) {
MyGet::$myValues = array();
return false;
}
MyGet::$myValues[$keywords[$index]] = $where[$keywords[$index]];
}
}
}
你可以像这样使用它:
if (MyGet::setMyValues(array(0 => "type", 1 => "case"), $_GET)) {
//the values are initialized
} else {
//the values are not initialized
}