Skip to content

Commit 118695a

Browse files
author
Ilia Alshanetsky
committed
#doc
Added 3rd parameter to filter_var_array() and filter_input_array() functions that allows disabling addition of empty elements
1 parent 53204a2 commit 118695a

File tree

2 files changed

+40
-8
lines changed

2 files changed

+40
-8
lines changed

ext/filter/filter.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,13 @@ ZEND_END_ARG_INFO()
9696
ZEND_BEGIN_ARG_INFO_EX(arginfo_filter_input_array, 0, 0, 1)
9797
ZEND_ARG_INFO(0, type)
9898
ZEND_ARG_INFO(0, definition)
99+
ZEND_ARG_INFO(0, add_empty)
99100
ZEND_END_ARG_INFO()
100101

101102
ZEND_BEGIN_ARG_INFO_EX(arginfo_filter_var_array, 0, 0, 1)
102103
ZEND_ARG_INFO(0, data)
103104
ZEND_ARG_INFO(0, definition)
105+
ZEND_ARG_INFO(0, add_empty)
104106
ZEND_END_ARG_INFO()
105107

106108
ZEND_BEGIN_ARG_INFO(arginfo_filter_list, 0)
@@ -676,7 +678,7 @@ static void php_filter_call(zval **filtered, long filter, zval **filter_args, co
676678
}
677679
/* }}} */
678680

679-
static void php_filter_array_handler(zval *input, zval **op, zval *return_value TSRMLS_DC) /* {{{ */
681+
static void php_filter_array_handler(zval *input, zval **op, zval *return_value, zend_bool add_empty TSRMLS_DC) /* {{{ */
680682
{
681683
char *arg_key;
682684
uint arg_key_len;
@@ -711,7 +713,9 @@ static void php_filter_array_handler(zval *input, zval **op, zval *return_value
711713
RETURN_FALSE;
712714
}
713715
if (zend_hash_find(Z_ARRVAL_P(input), arg_key, arg_key_len, (void **)&tmp) != SUCCESS) {
714-
add_assoc_null_ex(return_value, arg_key, arg_key_len);
716+
if (add_empty) {
717+
add_assoc_null_ex(return_value, arg_key, arg_key_len);
718+
}
715719
} else {
716720
zval *nval;
717721

@@ -808,15 +812,16 @@ PHP_FUNCTION(filter_var)
808812
}
809813
/* }}} */
810814

811-
/* {{{ proto mixed filter_input_array(constant type, [, mixed options]])
815+
/* {{{ proto mixed filter_input_array(constant type, [, mixed options [, bool add_empty]]])
812816
* Returns an array with all arguments defined in 'definition'.
813817
*/
814818
PHP_FUNCTION(filter_input_array)
815819
{
816820
long fetch_from;
817821
zval *array_input = NULL, **op = NULL;
822+
zend_bool add_empty = 1;
818823

819-
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|Z", &fetch_from, &op) == FAILURE) {
824+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|Zb", &fetch_from, &op, &add_empty) == FAILURE) {
820825
return;
821826
}
822827

@@ -852,18 +857,19 @@ PHP_FUNCTION(filter_input_array)
852857
}
853858
}
854859

855-
php_filter_array_handler(array_input, op, return_value TSRMLS_CC);
860+
php_filter_array_handler(array_input, op, return_value, add_empty TSRMLS_CC);
856861
}
857862
/* }}} */
858863

859-
/* {{{ proto mixed filter_var_array(array data, [, mixed options]])
864+
/* {{{ proto mixed filter_var_array(array data, [, mixed options [, bool add_empty]]])
860865
* Returns an array with all arguments defined in 'definition'.
861866
*/
862867
PHP_FUNCTION(filter_var_array)
863868
{
864869
zval *array_input = NULL, **op = NULL;
870+
zend_bool add_empty = 1;
865871

866-
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|Z", &array_input, &op) == FAILURE) {
872+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|Zb", &array_input, &op, &add_empty) == FAILURE) {
867873
return;
868874
}
869875

@@ -874,7 +880,7 @@ PHP_FUNCTION(filter_var_array)
874880
RETURN_FALSE;
875881
}
876882

877-
php_filter_array_handler(array_input, op, return_value TSRMLS_CC);
883+
php_filter_array_handler(array_input, op, return_value, add_empty TSRMLS_CC);
878884
}
879885
/* }}} */
880886

ext/filter/tests/054.phpt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
filter_var_array() - using the add_empty option
3+
--SKIPIF--
4+
<?php if (!extension_loaded("filter")) die("skip"); ?>
5+
--FILE--
6+
<?php
7+
8+
$data = array('foo' => 123);
9+
10+
var_dump(
11+
filter_var_array($data, array('foo' => array('filter' => FILTER_DEFAULT), 'bar' => array('filter' => FILTER_DEFAULT)), false),
12+
filter_var_array($data, array('foo' => array('filter' => FILTER_DEFAULT), 'bar' => array('filter' => FILTER_DEFAULT)))
13+
);
14+
15+
?>
16+
--EXPECT--
17+
array(1) {
18+
["foo"]=>
19+
string(3) "123"
20+
}
21+
array(2) {
22+
["foo"]=>
23+
string(3) "123"
24+
["bar"]=>
25+
NULL
26+
}

0 commit comments

Comments
 (0)