首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用foreach循环初始化变量

使用foreach循环初始化变量
EN

Stack Overflow用户
提问于 2012-05-06 04:35:41
回答 4查看 2.1K关注 0票数 1

我已经构建了一个空的关联数组,其中的键名引用了提交的post数据。我可以很好地捕获后期数据,但是我在尝试实例化名与数组键匹配的变量时遇到了麻烦。

例如:

代码语言:javascript
复制
$insArray = array('rUsername'=>'', 'rPass'=>'', 'rQuestion'=>'', 'rAnswer'=>'', 'rFName'=>'', 'rLName'=>'', 'rBDateD'=>'', 'rBDateM'=>'', 'rBDateY'=>'', 'rHCheck'=>'', 'rHCeckOption'=>'', 'rEmail'=>'');

foreach($insArray as $key=>$value){
    if (filter_input(INPUT_POST, $key) != ''){
        $key = stripslashes(filter_input(INPUT_POST, $key)); 
        $insArray[$key] = $key;
    }       
}

第一行创建空数组,然后foreach循环这个数组。现在变得棘手了。

filter_input(INPUT_POST, $key)捕获与当前键匹配的post数据中的值,在本例中为rUsername。

$key是问题所在。我希望新变量的名称是关联键名,例如,我希望在第一次迭代中用$key替换$rUsername,在第二次迭代中用$rPass替换等等。我试过使用两个$$,但我知道这是不对的。以前从未试过这样做,但如果我能弄清楚,那会很有帮助的。

更新:

这是最后的代码,它是所提供的两个答案的组合。

代码语言:javascript
复制
if (isset($_POST['submit'])) {
    //Build array of variables to be put into database
    $insArray = array('rUsername'=>'', 'rPassword'=>'', 'rQuestion'=>'', 'rAnswer'=>'', 'rFName'=>'', 'rLName'=>'', 'rBDateD'=>'', 'rBDateM'=>'', 'rBDateY'=>'', 'rHCheck'=>'', 'rHCheckOption'=>'', 'rEmail'=>'');

    foreach(array_keys($insArray) as $key){
        $insArray[$key] = filter_input(INPUT_POST, $key);
        $$key = filter_input(INPUT_POST, $key);
    }
}

给了我我想要的输出,谢谢各位!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-06 04:44:56

您根本没有访问$_POST,所以您所做的就是使用一些您自己定义的数组成员,对它们进行筛选,以查找有害的POST字符(为什么要插入您自己的代码?)然后从那些自定义的键值创建一个新的数组。

如果我猜到你想要什么,应该是这样的:

代码语言:javascript
复制
foreach(array_keys($insArray) as $key) {
    $insArray[$key] = stripslashes(filter_input(INPUT_POST, $_POST[$key]));
}

条纹斜杠的使用表明,您使用的是具有magic_quotes启用功能的braindead版本的PHP。您应该升级到PHP的现代版本和/或关闭它们。

票数 2
EN

Stack Overflow用户

发布于 2012-05-06 04:45:19

解决办法是改变

代码语言:javascript
复制
$key = stripslashes(filter_input(INPUT_POST, $key));

代码语言:javascript
复制
$$key = stripslashes(filter_input(INPUT_POST, $key));

请参阅http://www.php.net/manual/en/language.variables.variable.php

另外,请重新检查您的代码,这些代码正在执行一些错误。

票数 1
EN

Stack Overflow用户

发布于 2012-05-06 06:45:10

如果我对你的理解是正确的,我会建议你这样做:

代码语言:javascript
复制
$defaultValues = array('rUsername'=>'', 'rPass'=>'', 'rQuestion'=>'', 'rAnswer'=>'', 'rFName'=>'', 'rLName'=>'', 'rBDateD'=>'', 'rBDateM'=>'', 'rBDateY'=>'', 'rHCheck'=>'', 'rHCeckOption'=>'', 'rEmail'=>'');
$values = array_map('stripslashes', array_merge($defaultValues, array_filter($_POST)));
extract($values, EXTR_SKIP);
echo $rUsername;
echo $rPass;
.........

通过使用上面的片段,您必须考虑到以下几点

  • 我使用提取函数和EXTR_SKIP,这样您就不会覆盖现有的变量。确保只使用代码中需要的变量,并对它们进行正确的清理。
  • 通过在过滤器上使用$_POST超级全局im“擦除”所有空变量或空变量。因此,如果未通过$_POST发送预期密钥,则默认为$defaultValues数组指定的值。
  • 我不太明白为什么没有第三个参数(过滤器常量)而使用输入
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10468130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档