]> granicus.if.org Git - php/commitdiff
Taken from PHP3 source.
authorAndrei Zmievski <andrei@php.net>
Mon, 4 Oct 1999 21:10:26 +0000 (21:10 +0000)
committerAndrei Zmievski <andrei@php.net>
Mon, 4 Oct 1999 21:10:26 +0000 (21:10 +0000)
ChangeLog
ext/standard/basic_functions.c
ext/standard/basic_functions.h

index 7a598a5bc738173f204efce57560e58c54d239fd..ff04c507ed2b056ccf57e1bf635757b63dd17cd5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@ PHP 4.0 CHANGE LOG                                                    ChangeLog
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
 ?? ?? 1999, Version 4.0 Beta 3
+- Ported range() and shuffle() from PHP3 to PHP4 (Andrei)
 - Fixed header("HTTP/..."); behaviour (Sascha)
 - Improved UNIX build system. Now utilizes libtool (Sascha)
 - Upgrade some more internal functions to use new Zend function API. (Thies, 
index 0fc72f75a6b53b890a9a75e70f11e3f9727dc015..a188f73668b8de90c04e15cf3b34ec728616b7f4 100644 (file)
@@ -90,6 +90,7 @@ function_entry basic_functions[] = {
        PHP_FE(usort,                                                                   first_arg_force_ref)
        PHP_FE(uasort,                                                                  first_arg_force_ref)
        PHP_FE(uksort,                                                                  first_arg_force_ref)
+       PHP_FE(shuffle,                                                                 first_arg_force_ref)
        PHP_FE(array_walk,                                                              first_arg_force_ref)
        PHP_FALIAS(sizeof,                      count,                          first_arg_allow_ref)
        PHP_FE(count,                                                                   first_arg_allow_ref)
@@ -317,6 +318,7 @@ function_entry basic_functions[] = {
        PHP_FE(in_array,                                        NULL)
        PHP_FE(extract,                                         NULL)
        PHP_FE(compact,                                         NULL)
+       PHP_FE(range,                                           NULL)
        PHP_FE(array_push,                                      first_arg_force_ref)
        PHP_FE(array_pop,                                       first_arg_force_ref)
        PHP_FE(array_shift,                                     first_arg_force_ref)
@@ -2471,6 +2473,73 @@ PHP_FUNCTION(compact)
 }
 /* }}} */
 
+/* {{{ proto array range(int low, int high)
+   Create an array containing the range of integers from low to high (inclusive) */
+PHP_FUNCTION(range)
+{
+       zval *zlow, *zhigh;
+       int low, high;
+       
+       if (ARG_COUNT(ht) != 2 || getParameters(ht,2,&zlow,&zhigh) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+       convert_to_long(zlow);
+       convert_to_long(zhigh);
+       low = zlow->value.lval;
+       high = zhigh->value.lval;
+
+    /* allocate an array for return */
+    if (array_init(return_value) == FAILURE) {
+            RETURN_FALSE;
+    }
+
+       for (; low <= high; low++) {
+               add_next_index_long(return_value, low);
+       }       
+}
+/* }}} */
+
+
+static int array_data_shuffle(const void *a, const void*b) {
+       return (
+       /* This is just a little messy. */
+#ifdef HAVE_LRAND48
+        lrand48()
+#else
+#ifdef HAVE_RANDOM
+        random()
+#else
+        rand()
+#endif
+#endif
+       % 2) ? 1 : -1;
+}
+
+
+/* {{{ proto int shuffle(array array_arg)
+   Randomly shuffle the contents of an array */
+PHP_FUNCTION(shuffle)
+{
+       zval **array;
+
+       if (ARG_COUNT(ht) != 1 || getParametersEx(1, &array) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+       if ((*array)->type != IS_ARRAY) {
+               php_error(E_WARNING, "Wrong datatype in shuffle() call");
+               return;
+       }
+       if (!ParameterPassedByReference(ht,1)) {
+               php_error(E_WARNING, "Array not passed by reference in call to shuffle()");
+               return;
+       }
+       if (zend_hash_sort((*array)->value.ht, array_data_shuffle, 1) == FAILURE) {
+               return;
+       }
+       RETURN_TRUE;
+}
+/* }}} */
+
 
 /* HashTable* _phpi_splice(HashTable *in_hash, int offset, int length,
                                                   zval ***list, int list_count, HashTable **removed) */
index 4ed5d7fc4b74779cff4c122a2d81c84ac5f160b2..8591352491047300b6db186aabb1ba0865eab00c 100644 (file)
@@ -122,6 +122,8 @@ PHP_FUNCTION(function_exists);
 PHP_FUNCTION(in_array);
 PHP_FUNCTION(extract);
 PHP_FUNCTION(compact);
+PHP_FUNCTION(range);
+PHP_FUNCTION(shuffle);
 PHP_FUNCTION(array_push);
 PHP_FUNCTION(array_pop);
 PHP_FUNCTION(array_shift);