一次循环$ _GET和$ _POST?

时间:2015-08-11 06:45:56

标签: php arrays

有没有办法一次性动态访问$_GET$_POST? IE,类似于:

$do = array('GET', 'POST');

foreach($do AS $type) {
    foreach (${'_'.type} AS $var=>$val) {
         ... # logic
    }
}

我知道有$_REQUEST,但这并不告诉我来源(获取或发布)以及已弃用的HTTP_GET_VARSHTTP_POST_VARS,但这些已被弃用。

显然,我可以单独循环。我试图避免这种情况的原因是逻辑有点冗长但也相同。理想的是不必拥有这种逻辑的副本并让自己犯错误。

或者我是否完全以错误的方式思考这个问题,还有其他推荐方法吗?

谢谢!

谢谢

感谢大家的好评。我认为@deceze最客观地回答了这个问题,但是@charlee(以及后来的deceze)暗示了一个更好的解决方案。

最后,我创建了一个带逻辑的函数,然后将它放在我的foreach中,如下:

foreach($_GET AS $var => $val) {
    $_GET[$var] = func($val);
}

我最终得到了两个foreach(),但我很欣赏它的易读性和可用性。再次感谢大家!

4 个答案:

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

是的,你不应该使用$_REQUESTbecause

  

它结合了COOKIE以及GET和POST,并且COOKIE数据总是优先创造危险"粘性"变量

答案 3 :(得分:0)

如果逻辑相同,您可以尝试使用函数。将整个代码放在函数中并传递要循环的数组,即$ _GET或$ _POST。如果您想知道它是GET还是POST的来源,您可以尝试连接。

知道你想要什么样的输出会有所帮助。