ID: 24258
Updated by: sniper@php.net
Reported By: php at electricsurfer dot com
-Status: Analyzed
+Status: Closed
Bug Type: Feature/Change Request
Operating System: Win XP
PHP Version: 5.0.0
Previous Comments:
------------------------------------------------------------------------
[2004-01-23 19:24:45] 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
------------------------------------------------------------------------
[2004-01-23 19:24:44] 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
------------------------------------------------------------------------
[2004-01-17 12:47:34] 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);
}
------------------------------------------------------------------------
[2003-06-19 09:59:37] 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)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=24258&edit=1