mirror of
https://github.com/php/php-src.git
synced 2026-04-29 03:03:26 +02:00
added array_count_values function.
This commit is contained in:
@@ -2,6 +2,7 @@ PHP 4.0 CHANGE LOG ChangeLog
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
|
||||
?? ?? 1999, Version 4.0 Beta 3
|
||||
- Added array_count_values() function. (Thies)
|
||||
- snmp, pgsql, mysql and gd modules can be built as dynamically loaded
|
||||
modules (Greg)
|
||||
- OCI8 fix for fetching empty LOBs (Thies)
|
||||
|
||||
@@ -337,6 +337,7 @@ function_entry basic_functions[] = {
|
||||
PHP_FE(array_merge, NULL)
|
||||
PHP_FE(array_keys, NULL)
|
||||
PHP_FE(array_values, NULL)
|
||||
PHP_FE(array_count_values, NULL)
|
||||
|
||||
PHP_FE(connection_aborted, NULL)
|
||||
PHP_FE(connection_timeout, NULL)
|
||||
@@ -3243,6 +3244,66 @@ PHP_FUNCTION(array_values)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto array array_count_values(array input)
|
||||
Return the value as key and the frequency of that value in <input> as value */
|
||||
PHP_FUNCTION(array_count_values)
|
||||
{
|
||||
zval **input, /* Input array */
|
||||
**entry; /* An entry in the input array */
|
||||
zval **tmp;
|
||||
HashTable *myht;
|
||||
|
||||
/* Get arguments and do error-checking */
|
||||
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &input) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
if ((*input)->type != IS_ARRAY) {
|
||||
zend_error(E_WARNING, "Argument to array_count_values() should be an array");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Initialize return array */
|
||||
array_init(return_value);
|
||||
|
||||
/* Go through input array and add values to the return array */
|
||||
myht = (*input)->value.ht;
|
||||
zend_hash_internal_pointer_reset(myht);
|
||||
while (zend_hash_get_current_data(myht, (void **)&entry) == SUCCESS) {
|
||||
if ((*entry)->type == IS_LONG) {
|
||||
if (zend_hash_index_find(return_value->value.ht,
|
||||
(*entry)->value.lval,
|
||||
(void**)&tmp) == FAILURE) {
|
||||
zval *data;
|
||||
MAKE_STD_ZVAL(data);
|
||||
data->type = IS_LONG;
|
||||
data->value.lval = 1;
|
||||
zend_hash_index_update(return_value->value.ht,(*entry)->value.lval, &data, sizeof(data), NULL);
|
||||
} else {
|
||||
(*tmp)->value.lval++;
|
||||
}
|
||||
} else if ((*entry)->type == IS_STRING) {
|
||||
if (zend_hash_find(return_value->value.ht,
|
||||
(*entry)->value.str.val,
|
||||
(*entry)->value.str.len+1,
|
||||
(void**)&tmp) == FAILURE) {
|
||||
zval *data;
|
||||
MAKE_STD_ZVAL(data);
|
||||
data->type = IS_LONG;
|
||||
data->value.lval = 1;
|
||||
zend_hash_update(return_value->value.ht,(*entry)->value.str.val,(*entry)->value.str.len + 1, &data, sizeof(data), NULL);
|
||||
} else {
|
||||
(*tmp)->value.lval++;
|
||||
}
|
||||
} else {
|
||||
zend_error(E_WARNING, "Can only count STRING and INTEGER values!");
|
||||
}
|
||||
|
||||
zend_hash_move_forward(myht);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
|
||||
@@ -141,6 +141,7 @@ PHP_FUNCTION(array_slice);
|
||||
PHP_FUNCTION(array_merge);
|
||||
PHP_FUNCTION(array_keys);
|
||||
PHP_FUNCTION(array_values);
|
||||
PHP_FUNCTION(array_count_values);
|
||||
|
||||
#if HAVE_PUTENV
|
||||
typedef struct {
|
||||
|
||||
Reference in New Issue
Block a user