有没有办法一次性动态访问$_GET
和$_POST
? IE,类似于:
$do = array('GET', 'POST');
foreach($do AS $type) {
foreach (${'_'.type} AS $var=>$val) {
... # logic
}
}
我知道有$_REQUEST
,但这并不告诉我来源(获取或发布)以及已弃用的HTTP_GET_VARS
和HTTP_POST_VARS
,但这些已被弃用。
显然,我可以单独循环。我试图避免这种情况的原因是逻辑有点冗长但也相同。理想的是不必拥有这种逻辑的副本并让自己犯错误。
或者我是否完全以错误的方式思考这个问题,还有其他推荐方法吗?
谢谢!
感谢大家的好评。我认为@deceze最客观地回答了这个问题,但是@charlee(以及后来的deceze)暗示了一个更好的解决方案。
最后,我创建了一个带逻辑的函数,然后将它放在我的foreach中,如下:
foreach($_GET AS $var => $val) {
$_GET[$var] = func($val);
}
我最终得到了两个foreach(),但我很欣赏它的易读性和可用性。再次感谢大家!
答案 0 :(得分:2)
foreach (array('get' => $_GET, 'post' => $_POST) as $type => $values) {
foreach ($values as $key => $value) {
...
}
}
答案 1 :(得分:1)
如果你关心来源我建议你单独循环。将$ _POST与$ _GET混合是不安全的,因为黑客通过GET传递数据要容易得多。
长逻辑总是可以提取到一个函数中,因此你不会拥有这个逻辑的副本。
答案 2 :(得分:1)
将数组与array_merge()
合并:
$_GET = array('one' => 'foo', 'two' => 'bar');
$_POST = array('three' => 'foo', 'four' => 'bar');
$merged = array('_GET' => $_GET, '_POST' => $_POST);
foreach($merged AS $type => $array) {
foreach ($array AS $var => $val) {
echo "[{$type}] {$var}: {$val}" . PHP_EOL;
}
}
输出
[_GET] one: foo
[_GET] two: bar
[_POST] three: foo
[_POST] four: bar
是的,你不应该使用$_REQUEST
,because
它结合了COOKIE以及GET和POST,并且COOKIE数据总是优先创造危险"粘性"变量
答案 3 :(得分:0)
如果逻辑相同,您可以尝试使用函数。将整个代码放在函数中并传递要循环的数组,即$ _GET或$ _POST。如果您想知道它是GET还是POST的来源,您可以尝试连接。
知道你想要什么样的输出会有所帮助。