From 23e8d1762dd787191e05c98eb5a8f5e0383b916e Mon Sep 17 00:00:00 2001 From: Andrei Zmievski Date: Fri, 1 Oct 1999 17:36:54 +0000 Subject: [PATCH] Added array_reverse() function. --- ChangeLog | 1 + ext/standard/basic_functions.c | 44 ++++++++++++++++++++++++++++++++++ ext/standard/basic_functions.h | 1 + 3 files changed, 46 insertions(+) diff --git a/ChangeLog b/ChangeLog index 54d87a180c..3695bf2447 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ PHP 4.0 CHANGE LOG ChangeLog ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ?? 1999, Version 4.0 Beta 3 +- Added array_reverse() function (Andrei) - Some more XML fixes/cleanups (Thies) - Updated preg_replace() so that if any argument passed in is an array it will make a copy of each entry before converting it to string so that diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 54e2091495..0fc72f75a6 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -327,6 +327,7 @@ function_entry basic_functions[] = { PHP_FE(array_keys, NULL) PHP_FE(array_values, NULL) PHP_FE(array_count_values, NULL) + PHP_FE(array_reverse, NULL) PHP_FE(connection_aborted, NULL) PHP_FE(connection_timeout, NULL) @@ -3103,6 +3104,49 @@ PHP_FUNCTION(array_count_values) } /* }}} */ +/* {{{ proto array array_reverse(array input) + Return input as a new array with the order of the entries reversed */ +PHP_FUNCTION(array_reverse) +{ + zval **input, /* Input array */ + **entry; /* An entry in the input array */ + char *string_key; + ulong num_key; + + /* 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_reverse() should be an array"); + return; + } + + /* Initialize return array */ + array_init(return_value); + + zend_hash_internal_pointer_end((*input)->value.ht); + while(zend_hash_get_current_data((*input)->value.ht, (void **)&entry) == SUCCESS) { + (*entry)->refcount++; + + switch (zend_hash_get_current_key((*input)->value.ht, &string_key, &num_key)) { + case HASH_KEY_IS_STRING: + zend_hash_update(return_value->value.ht, string_key, strlen(string_key)+1, + entry, sizeof(zval *), NULL); + efree(string_key); + break; + + case HASH_KEY_IS_LONG: + zend_hash_next_index_insert(return_value->value.ht, + entry, sizeof(zval *), NULL); + break; + } + + zend_hash_move_backwards((*input)->value.ht); + } +} +/* }}} */ /* * Local variables: diff --git a/ext/standard/basic_functions.h b/ext/standard/basic_functions.h index d704f0506e..4ed5d7fc4b 100644 --- a/ext/standard/basic_functions.h +++ b/ext/standard/basic_functions.h @@ -132,6 +132,7 @@ PHP_FUNCTION(array_merge); PHP_FUNCTION(array_keys); PHP_FUNCTION(array_values); PHP_FUNCTION(array_count_values); +PHP_FUNCTION(array_reverse); #if HAVE_PUTENV typedef struct { -- 2.40.0