在php中处理大量$ _REQUEST变量的最有效,最安全的方法

时间:2010-01-26 10:58:05

标签: php arrays forms

我有一个提交大量输入的表单......

<input type="hidden" name="searchTag_happy" value="0" />
<input type="hidden" name="searchTag_sad" value="0" />
<input type="hidden" name="searchTag_ambivalent" value="0" />
etc
.
.
.

这些输入的值属性可以是“0”或“1”。

我想使用此信息创建一个数组“searchTags”,其中包含值设置为“1”的任何属性。

我想知道在php中处理这个问题最有效,最安全的方法是什么。目前我有一长串的if语句如此......

if ($_REQUEST['searchTag_happy']) $searchTagArray[] = "happy";
if ($_REQUEST['searchTag_sad']) $searchTagArray[] = "sad";
if ($_REQUEST['searchTag_ambivalent']) $searchTagArray[] = "ambivalent";
etc
.
.
.

但这似乎非常冗长。还有更好的选择吗?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

foreach($_REQUEST as $k=>$req)
{
   if(strpos($k,"searchTag_")!==false && $req)
   {
       $searchTagArray[]=$req;
   }
}

通过这种方式,您遍历REQUEST数组并仅获取包含“searchTag_”且值为1的键的值

答案 1 :(得分:0)

Mck89几乎是正确的 - 获得所需的数组:

foreach($_REQUEST as $k=>$req)
{
   if(strpos($k,"searchTag_")!==false && $req)
   {
       $searchTagArray[]=substr($k,10);
   }
}

但是考虑到数组的编号不相关,那么它意味着可能无法优化结果数据结构 - 更好的解决方案可能是:

       $searchTagArray[substr($k,10)]=1;

或者只是使用array_filter()返回非零值而不转换键。

下进行。