PHP:filter_input_array()。你能算一下'#34;类型"中的元素数量吗?没有使用超级全局的论证相关的超级全局?

时间:2015-02-18 17:46:26

标签: php filter

http://php.net/manual/en/function.filter-input-array.php

filter_input_array()

mixed filter_input_array ( int $type [, mixed $definition [, bool $add_empty = true ]] )

Possbile $type

INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, or INPUT_ENV

是否可以计算与“type”参数(一个整数)相关联的元素数量而无需引用超级全局?由于“type”参数是一个整数,我认为以下内容不起作用。

非工作示例:

count(INPUT_POST);

我的目标是测试计算与“type”参数关联的元素的结果,以查看是否至少提交了元素的最小数量或最多数量。范围检查对我来说不是问题。在不使用超全局的情况下获取外部超级全局元素的计数是我的问题。

在带有数组和计数器的循环中使用filter_has_var()将不足以,因为仅计算我想要过滤的元素,这些元素也存在于给定的“键入“参数(INPUT_POST,INPUT_GET,...)”关联的超级全局($ _POST,$ _GET)

如果存在的元素多于我想要允许的元素,或者存在的元素少于所需元素,则我的程序应抛出异常并采取适当的操作。

2 个答案:

答案 0 :(得分:0)

我不知道为什么你不想使用超全球,因为这是filter_input_array正在使用的数据,虽然看起来它使用“作为提交的数据”而不是实际的超全球。如果不使用超全球,最好的选择就是:

if( ($count = count($filtered = filter_input_array(INPUT_POST))) > 2 && $count < 5 ) {
    //use $filtered
} else {
    //error
}

您可以将其定义为函数并传入最小值和最大值。

否则,如果没有$_POST,您将无法计算count($_POST)中的条目。您可以使用filter_input_array访问未提交的未修改数据,也可以使用超级全局来反映您对其所做的任何更改。

答案 1 :(得分:0)

count(filter_input_array(INPUT_SERVER));
count(filter_input_array(INPUT_POST));
count(filter_input_array(INPUT_GET));

。 。

你从这里做什么取决于你。