我可以在foreach循环中过滤$ _GET数组吗?

时间:2014-02-03 13:42:47

标签: php html mysql foreach get

我在内部数据库上有一个表格,公众没有使用或访问过。

表单包含从SQL数据库生成的项目列表。 每个项目都有一个复选框,用于选择是否要将其带到下一页。 它永远不是一定数量的项目,取决于访问哪个客户/表。 复选框名称是在SQL select while循环中生成的,因此复选框名称值会增加“num1,num2,num3”等。

在表单输出中我有:

foreach ($_get as $result){
echo $result;
}

这与完整的%_get数组的值相呼应。

我想将其过滤为仅显示包含“num”的$ _get值,因此它不会为$ _get数组中的任何其他内容循环。

例如,我想要它:

echo %_get['num1];
echo %_get['num2];
echo %_get['num3];
/* etc.. looping the amount of times the string "num" is used and not looping if for
example it didn't contain "num" like %_get['egg'] if it existed */

我希望这是有道理的。

如果有更好的方法,我愿意接受任何解决方案或替代方法。

非常感谢, 灰

4 个答案:

答案 0 :(得分:1)

你只是想做这样的事情:

foreach($_GET as $key=>$val){
    if(false !== stripos($key, 'num')){
        echo $_GET[$key];
    }
}

这循环遍历整个_GET数组并检查该键是否包含字符串num。我使用了不区分大小写的stripo,如果您希望它区分大小写,请将stripos替换为strpos

检查显式false的原因是stripos返回字符串位置,如果找到该字符串,该位置可以为零。 PHP中的零值松散等于false。通过使用!==代替!=,我们只匹配结果,如果它不是实际的假(即根本找不到)。

请注意,您确实需要对现实代码进行某种输入过滤和输出转义。

答案 1 :(得分:1)

foreach循环可以选择$ _GET数组项的键和值,因此您可以检查键是否以 num 开头。

foreach($_GET as $key => $value) {
    if(strpos($key, 'num') === 0) {
        echo $value;
    }
}

我强烈建议过滤和验证任何输入(GET,POST等),特别是在生产系统上。 http://www.php.net/manual/en/function.filter-input.php为初学者。

答案 2 :(得分:0)

试试这个:

foreach ($_GET as $key=>$result){
   if(substr($key, 0, 3) == 'num') {
     echo $result;
   }
}

循环所有$ _GET全局数组,并仅过滤那些以'num'开头并回显值的数据。

答案 3 :(得分:0)

您可以将array_filter与回调一起使用来过滤掉数组中的项目。

http://uk3.php.net/array_filter

例如:

function even($var)
{
    // returns whether the input integer is even
    return(!($var & 1));
}

$array = array(6, 7, 8, 9, 10, 11, 12);

print_r(array_filter($array, "even"));

$filteredArray = array_filter($array, "even");

这将基于奇数/偶数过滤掉。您可以将回调更改为套件。