]> granicus.if.org Git - php/commitdiff
Added array_reverse() function.
authorAndrei Zmievski <andrei@php.net>
Fri, 1 Oct 1999 17:36:54 +0000 (17:36 +0000)
committerAndrei Zmievski <andrei@php.net>
Fri, 1 Oct 1999 17:36:54 +0000 (17:36 +0000)
ChangeLog
ext/standard/basic_functions.c
ext/standard/basic_functions.h

index 54d87a180cc16523e5215c2c1addff733147b6e5..3695bf2447d59646e49aab349f239f5932a57129 100644 (file)
--- 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
index 54e20914958e1a9b50d2135c2f73359daede501a..0fc72f75a6b53b890a9a75e70f11e3f9727dc015 100644 (file)
@@ -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:
index d704f0506e59e583e21543c3cb0a194b5b7dce37..4ed5d7fc4b74779cff4c122a2d81c84ac5f160b2 100644 (file)
@@ -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 {