From: David Croft Date: Mon, 30 Apr 2001 04:06:09 +0000 (+0000) Subject: @ - Added key_exists() to check if a given key or index exists in an X-Git-Tag: php-4.0.6RC1~255 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=34f03f2c5cce5b668bfaa1ec04ef8d2f1e9c33a1;p=php @ - Added key_exists() to check if a given key or index exists in an @ array or object (David Croft) Added key_exists() to check if a given key or index exists in an array or object --- diff --git a/ext/standard/array.c b/ext/standard/array.c index 739dff9029..5c17c12f3e 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -3075,6 +3075,44 @@ PHP_FUNCTION(array_map) /* }}} */ +/* {{{ proto bool key_exists(mixed key, array search) + Checks if the given key or index exists in the array */ +PHP_FUNCTION(key_exists) +{ + zval **key, /* key to check for */ + **array; /* array to check in */ + + if (ZEND_NUM_ARGS() != 2 || + zend_get_parameters_ex(ZEND_NUM_ARGS(), &key, &array) == FAILURE) { + WRONG_PARAM_COUNT; + } + + if (Z_TYPE_PP(array) != IS_ARRAY && Z_TYPE_PP(array) != IS_OBJECT) { + php_error(E_WARNING, "Wrong datatype for second argument in call to %s", get_active_function_name()); + RETURN_FALSE; + } + + switch (Z_TYPE_PP(key)) { + case IS_STRING: + if (zend_hash_exists(HASH_OF(*array), Z_STRVAL_PP(key), Z_STRLEN_PP(key)+1)) { + RETURN_TRUE; + } + RETURN_FALSE; + + case IS_LONG: + if (zend_hash_index_exists(HASH_OF(*array), Z_LVAL_PP(key))) { + RETURN_TRUE; + } + RETURN_FALSE; + + default: + php_error(E_WARNING, "Wrong datatype for first argument in call to %s", get_active_function_name()); + RETURN_FALSE; + } + +} +/* }}} */ + /* * Local variables: * tab-width: 4 diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 61e7f82869..7e779a7f75 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -588,6 +588,7 @@ function_entry basic_functions[] = { PHP_FE(array_sum, NULL) PHP_FE(array_filter, NULL) PHP_FE(array_map, NULL) + PHP_FE(key_exists, NULL) /* aliases from array.c */ PHP_FALIAS(pos, current, first_arg_force_ref) diff --git a/ext/standard/php_array.h b/ext/standard/php_array.h index fb00e2d08a..04ebb02167 100644 --- a/ext/standard/php_array.h +++ b/ext/standard/php_array.h @@ -77,6 +77,7 @@ PHP_FUNCTION(array_diff); PHP_FUNCTION(array_sum); PHP_FUNCTION(array_filter); PHP_FUNCTION(array_map); +PHP_FUNCTION(key_exists); HashTable* php_splice(HashTable *, int, int, zval ***, int, HashTable **); PHPAPI void php_array_merge(HashTable *dest, HashTable *src, int recursive);