]> granicus.if.org Git - php/commitdiff
#doc
authorIlia Alshanetsky <iliaa@php.net>
Thu, 28 Apr 2011 12:32:47 +0000 (12:32 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Thu, 28 Apr 2011 12:32:47 +0000 (12:32 +0000)
Added 3rd parameter to filter_var_array() and filter_input_array()
functions that allows disabling addition of empty elements

ext/filter/filter.c
ext/filter/tests/054.phpt [new file with mode: 0644]

index a2b14d9f3dcb8e74eaaba87124aa4da8dbb11c5b..e67bc7546dd31c6daf84fe58488188f111a0a005 100644 (file)
@@ -96,11 +96,13 @@ ZEND_END_ARG_INFO()
 ZEND_BEGIN_ARG_INFO_EX(arginfo_filter_input_array, 0, 0, 1)
        ZEND_ARG_INFO(0, type)
        ZEND_ARG_INFO(0, definition)
+       ZEND_ARG_INFO(0, add_empty)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_filter_var_array, 0, 0, 1)
        ZEND_ARG_INFO(0, data)
        ZEND_ARG_INFO(0, definition)
+       ZEND_ARG_INFO(0, add_empty)
 ZEND_END_ARG_INFO()
 
 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
 }
 /* }}} */
 
-static void php_filter_array_handler(zval *input, zval **op, zval *return_value TSRMLS_DC) /* {{{ */
+static void php_filter_array_handler(zval *input, zval **op, zval *return_value, zend_bool add_empty TSRMLS_DC) /* {{{ */
 {
        char *arg_key;
        uint arg_key_len;
@@ -711,7 +713,9 @@ static void php_filter_array_handler(zval *input, zval **op, zval *return_value
                                RETURN_FALSE;
                        }
                        if (zend_hash_find(Z_ARRVAL_P(input), arg_key, arg_key_len, (void **)&tmp) != SUCCESS) {
-                               add_assoc_null_ex(return_value, arg_key, arg_key_len);
+                               if (add_empty) {
+                                       add_assoc_null_ex(return_value, arg_key, arg_key_len);
+                               }
                        } else {
                                zval *nval;
 
@@ -808,15 +812,16 @@ PHP_FUNCTION(filter_var)
 }
 /* }}} */
 
-/* {{{ proto mixed filter_input_array(constant type, [, mixed options]])
+/* {{{ proto mixed filter_input_array(constant type, [, mixed options [, bool add_empty]]])
  * Returns an array with all arguments defined in 'definition'.
  */
 PHP_FUNCTION(filter_input_array)
 {
        long    fetch_from;
        zval   *array_input = NULL, **op = NULL;
+       zend_bool add_empty = 1;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|Z",  &fetch_from, &op) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|Zb",  &fetch_from, &op, &add_empty) == FAILURE) {
                return;
        }
 
@@ -852,18 +857,19 @@ PHP_FUNCTION(filter_input_array)
                }
        }
 
-       php_filter_array_handler(array_input, op, return_value TSRMLS_CC);
+       php_filter_array_handler(array_input, op, return_value, add_empty TSRMLS_CC);
 }
 /* }}} */
 
-/* {{{ proto mixed filter_var_array(array data, [, mixed options]])
+/* {{{ proto mixed filter_var_array(array data, [, mixed options [, bool add_empty]]])
  * Returns an array with all arguments defined in 'definition'.
  */
 PHP_FUNCTION(filter_var_array)
 {
        zval *array_input = NULL, **op = NULL;
+       zend_bool add_empty = 1;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|Z",  &array_input, &op) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|Zb",  &array_input, &op, &add_empty) == FAILURE) {
                return;
        }
 
@@ -874,7 +880,7 @@ PHP_FUNCTION(filter_var_array)
                RETURN_FALSE;
        }
 
-       php_filter_array_handler(array_input, op, return_value TSRMLS_CC);
+       php_filter_array_handler(array_input, op, return_value, add_empty TSRMLS_CC);
 }
 /* }}} */
 
diff --git a/ext/filter/tests/054.phpt b/ext/filter/tests/054.phpt
new file mode 100644 (file)
index 0000000..c8a5dad
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+filter_var_array() - using the add_empty option
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+$data = array('foo' => 123);
+
+var_dump(
+       filter_var_array($data, array('foo' => array('filter' => FILTER_DEFAULT), 'bar' => array('filter' => FILTER_DEFAULT)), false),
+       filter_var_array($data, array('foo' => array('filter' => FILTER_DEFAULT), 'bar' => array('filter' => FILTER_DEFAULT)))
+);
+
+?>
+--EXPECT--
+array(1) {
+  ["foo"]=>
+  string(3) "123"
+}
+array(2) {
+  ["foo"]=>
+  string(3) "123"
+  ["bar"]=>
+  NULL
+}