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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: php at electricsurfer dot com
New email:
PHP Version: OS:

 

 [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

Pull Requests

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-2025 The PHP Group
All rights reserved.
Last updated: Mon Apr 28 17:01:33 2025 UTC