php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #24258 array_keys 3rd parameter: strict
Submitted: 2003-06-19 09:59 UTC Modified: 2004-01-28 04:31 UTC
From: php at electricsurfer dot com Assigned:
Status: Closed Package: Feature/Change Request
PHP Version: 5.0.0 OS: Win XP
Private report: No CVE-ID: None
 [2003-06-19 09:59 UTC] php at electricsurfer dot com
Description:
------------
array_keys() would benefit from an optional 3rd parameter called $strict. array_keys(array input [, mixed search_value [, bool strict]])) .  This is similar to what in_array() has.  If set to true it would return an array of keys where value_for_key===search_value. (not only ==search_value)


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-01-17 12:47 UTC] andrey@php.net
Unified diff (http://www.hristov.com/andrey/projects/php_stuff/array_keys_strict.diff.txt):
Index: array.c
===================================================================
RCS file: /repository/php-src/ext/standard/array.c,v
retrieving revision 1.255
diff -u -r1.255 array.c
--- array.c	8 Jan 2004 08:17:30 -0000	1.255
+++ array.c	17 Jan 2004 17:23:55 -0000
@@ -2258,7 +2258,7 @@
 /* }}} */
 
 
-/* {{{ proto array array_keys(array input [, mixed search_value])
+/* {{{ proto array array_keys(array input [, mixed search_value[, bool strict]])
    Return just the keys from the input array, optionally only for the specified search_value */
 PHP_FUNCTION(array_keys)
 {
@@ -2266,18 +2266,21 @@
 	     **search_value,	/* Value to search for */
 	     **entry,		/* An entry in the input array */
 	       res,		/* Result of comparison */
+	     **strict,		/* be strict */
 	      *new_val;		/* New value */
 	int    add_key;		/* Flag to indicate whether a key should be added */
 	char  *string_key;	/* String key */
 	uint   string_key_len;
 	ulong  num_key;		/* Numeric key */
 	HashPosition pos;
+	int (*is_equal_func)(zval *, zval *, zval * TSRMLS_DC) = is_equal_function;
+
 
 	search_value = NULL;
 	
 	/* Get arguments and do error-checking */
-	if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
-		zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &search_value) == FAILURE) {
+	if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 3 ||
+		zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &search_value, &strict) == FAILURE) {
 		WRONG_PARAM_COUNT;
 	}
 	
@@ -2285,6 +2288,12 @@
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument should be an array");
 		return;
 	}
+	if (ZEND_NUM_ARGS() == 3) {
+		convert_to_boolean_ex(strict);
+		if (Z_LVAL_PP(strict)) {
+			is_equal_func = is_identical_function;
+		}
+	}
 	
 	/* Initialize return array */
 	array_init(return_value);
@@ -2294,7 +2303,7 @@
 	zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
 	while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &pos) == SUCCESS) {
 		if (search_value != NULL) {
-	 		is_equal_function(&res, *search_value, *entry TSRMLS_CC);
+	 		is_equal_func(&res, *search_value, *entry TSRMLS_CC);
 			add_key = zval_is_true(&res);
 		}
 [2004-01-23 19:24 UTC] andrey@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.

Thank you. This feature will be available starting PHP 5.0.0
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Wed May 08 11:01:32 2024 UTC