filter_input_array

(PHP 5 >= 5.2.0, PHP 7)

filter_input_arrayПринимает несколько переменных извне PHP и, при необходимости, фильтрует их

Описание

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

Эта функция полезна для получения множества переменных без многократного вызова функции filter_input().

Список параметров

type

Один из INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER или INPUT_ENV.

definition

Массив, определяющий аргументы. Допустимый ключ - строка string, содержащая имя переменной, и допустимое значение - или тип filter, или массив array, при необходимости определяющий фильтр, флаги и параметры. Если значение является массивом, допустимыми ключами являются filter, который определяет (тип фильтра ), flags, который определяет любые флаги, применяемые к фильтру и options, который определяет любые параметры, применяемые к фильтру. См. пример ниже для лучшего понимания.

Этот параметр также может быть целым числом, содержащим предопределенную фильтровую константу. Затем все значения во входном массиве фильтруются этим фильтром.

add_empty

Добавляет в результат отсутствующие ключи со значением NULL.

Возвращаемые значения

Массив, содержащий значения запрошенных переменных в случае успеха, или FALSE в случае возникновения ошибки. Значение массива будет FALSE, если фильтрация завершилась неудачей, или NULL, если переменная не определена. Либо, если установлен флаг FILTER_NULL_ON_FAILURE, возвращается FALSE, если переменная не определена и NULL, если фильтрация завершилась неудачей.

Примеры

Пример #1 Пример использования filter_input_array()

<?php
error_reporting
(E_ALL E_STRICT);
/* данные, полученные методом POST
$_POST = array(
    'product_id'    => 'libgd<script>',
    'component'     => '10',
    'versions'      => '2.0.33',
    'testscalar'    => array('2', '23', '10', '12'),
    'testarray'     => '2',
);
*/

$args = array(
    
'product_id'   => FILTER_SANITIZE_ENCODED,
    
'component'    => array('filter'    => FILTER_VALIDATE_INT,
                            
'flags'     => FILTER_REQUIRE_ARRAY
                            
'options'   => array('min_range' => 1'max_range' => 10)
                           ),
    
'versions'     => FILTER_SANITIZE_ENCODED,
    
'doesnotexist' => FILTER_VALIDATE_INT,
    
'testscalar'   => array(
                            
'filter' => FILTER_VALIDATE_INT,
                            
'flags'  => FILTER_REQUIRE_SCALAR,
                           ),
    
'testarray'    => array(
                            
'filter' => FILTER_VALIDATE_INT,
                            
'flags'  => FILTER_REQUIRE_ARRAY,
                           )

);

$myinputs filter_input_array(INPUT_POST$args);

var_dump($myinputs);
echo 
"\n";
?>

Результат выполнения данного примера:

array(6) {
  ["product_id"]=>
  array(1) {
    [0]=>
    string(17) "libgd%3Cscript%3E"
  }
  ["component"]=>
  array(1) {
    [0]=>
    int(10)
  }
  ["versions"]=>
  array(1) {
    [0]=>
    string(6) "2.0.33"
  }
  ["doesnotexist"]=>
  NULL
  ["testscalar"]=>
  bool(false)
  ["testarray"]=>
  array(1) {
    [0]=>
    int(2)
  }
}

Список изменений

Версия Описание
5.4.0 Добавлен параметр add_empty.

Примечания

Замечание:

В массиве INPUT_SERVER нет ключа REQUEST_TIME, потому что он будет позднее в $_SERVER.

Смотрите также

  • filter_input() - Принимает переменную извне PHP и, при необходимости, фильтрует ее
  • filter_var_array() - Принимает несколько переменных и, при необходимости, фильтрует их
  • Types of filters

Коментарии

Автор:
Looks like filter_input_array isn't aware of changes to the input arrays that were made before calling filter_input_array. Instead, it always looks at the originally submitted input arrays.

So this will not work:

$_POST['my_float_field'] = str_replace(',','.',$_POST['my_float_field']);
$args = array('my_float_field',FILTER_VALIDATE_FLOAT);
$result = filter_input_array(INPUT_POST, $args);
2008-07-08 09:37:35
http://php5.kiev.ua/manual/ru/function.filter-input-array.html
If you are trying to handling multiple form inputs with same name, then you must assign the `'flags'  => FILTER_REQUIRE_ARRAY` to the definitions entry.

Example, you have a html form as such:
<form>
 <input name="t1[]" value="Some string One" />
 <input name="t1[]" value="Another String Two" />
</form>

Your definitions array will look a little like this:
$args = array(
  't1'    => array(
      'name' => 't1',
      'filter' => FILTER_SANITIZE_STRING,
      'flags'  => FILTER_REQUIRE_ARRAY)
);
2009-01-26 09:35:37
http://php5.kiev.ua/manual/ru/function.filter-input-array.html
While filtering input arrays, be careful of what flags you set besides FILTER_REQUIRE_ARRAY. For example, setting the flags like so:

<?php
$filter 
= array(
'myInputArr' => array('filter' => FILTER_SANITIZE_STRING,
                     
'flags' => array('FILTER_FLAG_STRIP_LOW''FILTER_REQUIRE_ARRAY'))
);

$form_inputs filter_input_array(INPUT_POST$filter);
?>

.. will result in a blank $form_inputs['myInputArr'] regardless of what $_POST['myInputArr'] contains.
2010-03-13 05:18:08
http://php5.kiev.ua/manual/ru/function.filter-input-array.html
Автор:
Beware: if none of the arguments is set, this function returns NULL, not an array of NULL values.

/* No POST vars set in request
$_POST = array();
*/

$args = array('some_post_var' => FILTER_VALIDATE_INT);
$myinputs = filter_input_array(INPUT_POST, $args);
var_dump($myinputs);

Expected Output: array(1) { ["some_post_var"]=> NULL } 

Actual Output: NULL
2010-04-22 15:12:35
http://php5.kiev.ua/manual/ru/function.filter-input-array.html
Автор:
This function is very useful for filtering complicated array structure.

Code:
<?php
function filter_request($var$default_structure) {

   
$ret = array();

    foreach (
$default_structure as $key => $value) {
        if (!isset(
$var[$key])) {
           
$ret[$key] = $value;
        } elseif (
is_array($value)) {
           
$ret[$key] = filter_request($var[$key], $value);
        } elseif (
is_array($var[$key])) {
           
$ret[$key] = $value;
        } else {
           
$ret[$key] = $var[$key];
        }
    }

    return 
$ret;

}
?>

Sample Usage:
<?php
$_GET
['a']['wrong_structure'] = 'foo';
$_GET['b']['c'] = 'CORRECT';
$_GET['b']['d']['wrong_structure'] = 'bar';
$_GET['unneeded_item'] = 'baz';

var_dump(filter_request($_GET, array(
   
'a' => 'DEFAULT',
   
'b' => array(
       
'c' => 'DEFAULT',
       
'd' => 'DEFAULT',
    ),
)));
?>

Sample Result:
array(2) {
  ["a"]=>
  string(21) "DEFAULT"
  ["b"]=>
  array(2) {
    ["c"]=>
    string(12) "CORRECT"
    ["d"]=>
    string(21) "DEFAULT"
  }
}
2013-07-30 01:22:52
http://php5.kiev.ua/manual/ru/function.filter-input-array.html
Автор:
[New Version]
This function is very useful for filtering complicated array structure.
Also, Some integer bitmasks and invalid UTF-8 sequence detection are available.

Code:
<?php
/**
 * @param  integer $type    Constant like INPUT_XXX.
 * @param  array   $default Default structure of the specified super global var.
 *                          Following bitmasks are available:
 *  + FILTER_STRUCT_FORCE_ARRAY - Force 1 dimensional array.
 *  + FILTER_STRUCT_TRIM        - Trim by ASCII control chars.
 *  + FILTER_STRUCT_FULL_TRIM   - Trim by ASCII control chars,
 *                                full-width and no-break space.
 * @return array            The value of the filtered super global var.
 */
define('FILTER_STRUCT_FORCE_ARRAY'1);
define('FILTER_STRUCT_TRIM'2);
define('FILTER_STRUCT_FULL_TRIM'4);
function 
filter_struct_utf8($type, array $default) {
    static 
$func __FUNCTION__;
    static 
$trim "[\\x0-\x20\x7f]";
    static 
$ftrim "[\\x0-\x20\x7f\xc2\xa0\xe3\x80\x80]";
    static 
$recursive_static false;
    if (!
$recursive $recursive_static) {
       
$types = array(
           
INPUT_GET => $_GET,
           
INPUT_POST => $_POST,
           
INPUT_COOKIE => $_COOKIE,
           
INPUT_REQUEST => $_REQUEST,
        );
        if (!isset(
$types[(int)$type])) {
            throw new 
LogicException('unknown super global var type');
        }
       
$var $types[(int)$type];
       
$recursive_static true;
    } else {
       
$var $type;
    }
   
$ret = array();
    foreach (
$default as $key => $value) {
        if (
$is_int is_int($value)) {
            if (!(
$value | (
               
FILTER_STRUCT_FORCE_ARRAY |
               
FILTER_STRUCT_FULL_TRIM 
               
FILTER_STRUCT_TRIM
           
))) {
               
$recursive_static false;
                throw new 
LogicException('unknown bitmask');
            }
            if (
$value FILTER_STRUCT_FORCE_ARRAY) {
               
$tmp = array();
                if (isset(
$var[$key])) {
                    foreach ((array)
$var[$key] as $k => $v) {
                        if (!
preg_match('//u'$k)){
                            continue;
                        }
                       
$value &= FILTER_STRUCT_FULL_TRIM FILTER_STRUCT_TRIM;
                       
$tmp += array($k => $value $value '');
                    }
                }
               
$value $tmp;
            }
        }
        if (
$isset = isset($var[$key]) and is_array($value)) {
           
$ret[$key] = $func($var[$key], $value);
        } elseif (!
$isset || is_array($var[$key])) {
           
$ret[$key] = null;
        } elseif (
$is_int && $value FILTER_STRUCT_FULL_TRIM) {
           
$ret[$key] = preg_replace("/\A{$ftrim}++|{$ftrim}++\z/u"''$var[$key]);
        } elseif (
$is_int && $value FILTER_STRUCT_TRIM) {
           
$ret[$key] = preg_replace("/\A{$trim}++|{$trim}++\z/u"''$var[$key]);
        } else {
           
$ret[$key] = preg_replace('//u'''$var[$key]);
        }
        if (
$ret[$key] === null) {
           
$ret[$key] = $is_int '' $value;
        }
    }
    if (!
$recursive) {
       
$recursive_static false;
    }
    return 
$ret;
}
?>
2014-01-10 18:39:46
http://php5.kiev.ua/manual/ru/function.filter-input-array.html
Автор:
[New Version]

Example Usage:
<?php
$_GET
['A']['a'] = '  CORRECT(including some spaces)    ';
$_GET['A']['b'] = '  CORRECT(including some spaces)    ';
$_GET['A']['c'] = "Invalid UTF-8 sequence: \xe3\xe3\xe3";
$_GET['A']['d']['invalid_structure'] = 'INVALID';

$_GET['B']['a'] = '  CORRECT(including some spaces)    ';
$_GET['B']['b'] = "Invalid UTF-8 sequence: \xe3\xe3\xe3";
$_GET['B']['c']['invalid_structure'] = 'INVALID';
$_GET['B']["Invalid UTF-8 sequence: \xe3\xe3\xe3"] = 'INVALID';

$_GET['C']['a'] = '  CORRECT(including some spaces)    ';
$_GET['C']['b'] = "Invalid UTF-8 sequence: \xe3\xe3\xe3";
$_GET['C']['c']['invalid_structure'] = 'INVALID';
$_GET['C']["Invalid UTF-8 sequence: \xe3\xe3\xe3"] = 'INVALID';

$_GET['unneeded_item'] = 'UNNEEDED';

var_dump(filter_struct_utf8(INPUT_GET, array(
   
'A' => array(
       
'a' => '',
       
'b' => FILTER_STRUCT_TRIM,
       
'c' => '',
       
'd' => '',
    ),
   
'B' => FILTER_STRUCT_FORCE_ARRAY,
   
'C' => FILTER_STRUCT_FORCE_ARRAY FILTER_STRUCT_TRIM,
)));
?>

Example Result:
array(3) {
  ["A"]=>
  array(4) {
    ["a"]=>
    string(36) "  CORRECT(including some spaces)    "
    ["b"]=>
    string(30) "CORRECT(including some spaces)"
    ["c"]=>
    string(0) ""
    ["d"]=>
    string(0) ""
  }
  ["B"]=>
  array(3) {
    ["a"]=>
    string(36) "  CORRECT(including some spaces)    "
    ["b"]=>
    string(0) ""
    ["c"]=>
    string(0) ""
  }
  ["C"]=>
  array(3) {
    ["a"]=>
    string(30) "CORRECT(including some spaces)"
    ["b"]=>
    string(0) ""
    ["c"]=>
    string(0) ""
  }
}
2014-01-10 18:40:13
http://php5.kiev.ua/manual/ru/function.filter-input-array.html
Note that although you can provide a default filter for the entire input array there is no way to provide a flag for that filter without building the entire definition array yourself.

So here is a small function that can alleviate this hassle!

<?php
function filter_input_array_with_default_flags($type$filter$flags$add_empty true) {
   
$loopThrough = array();
    switch (
$type) {
        case 
INPUT_GET $loopThrough $_GET; break;
        case 
INPUT_POST $loopThrough $_POST; break;
        case 
INPUT_COOKIE $loopThrough $_COOKIE; break;
        case 
INPUT_SERVER $loopThrough $_SERVER; break;
        case 
INPUT_ENV $loopThrough $_ENV; break;
    }
   
   
$args = array();
    foreach (
$loopThrough as $key=>$value) {
       
$args[$key] = array('filter'=>$filter'flags'=>$flags);
    }
   
    return 
filter_input_array($type$args$add_empty);
}
?>
2014-01-21 23:36:55
http://php5.kiev.ua/manual/ru/function.filter-input-array.html
Here's an extended function that allows you to keep also the unfiltered items/args from the request, while you also apply validation to some of them:

<?php

$validationRules 
= [
   
'foo' => [
       
'filter' => FILTER_VALIDATE_REGEXP,
       
'options' => ['regexp' => '/^(bar|baz)$/i']
    ]
];

$request filter_input_array_keep_unfiltered_args(INPUT_POST$validationRules);

var_dump($request);

function 
filter_input_array_keep_unfiltered_args($type$filters$addEmpty true)
{
   
$rawRequest filter_input_array($type);

   
$validationRules = [];
    foreach (
$rawRequest as $key => $value) {
       
$validationRules[$key] = isset($filters[$key]) ? $filters[$key] : ['filter' => FILTER_DEFAULT];
    }

    return 
filter_input_array($type$validationRules$addEmpty);
}

?>
2023-08-22 19:26:18
http://php5.kiev.ua/manual/ru/function.filter-input-array.html

    Поддержать сайт на родительском проекте КГБ