From: Andrei Zmievski Date: Mon, 4 Oct 1999 21:10:26 +0000 (+0000) Subject: Taken from PHP3 source. X-Git-Tag: php-4.0b3_RC2~326 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cb78ebc0de9ecfdcd00a18ab0745bf2827ba9dbf;p=php Taken from PHP3 source. --- diff --git a/ChangeLog b/ChangeLog index 7a598a5bc7..ff04c507ed 100644 --- 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, diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 0fc72f75a6..a188f73668 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -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) */ diff --git a/ext/standard/basic_functions.h b/ext/standard/basic_functions.h index 4ed5d7fc4b..8591352491 100644 --- a/ext/standard/basic_functions.h +++ b/ext/standard/basic_functions.h @@ -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);