diff options
| author | Andrei Zmievski <andrei@php.net> | 1999-10-04 21:10:26 +0000 | 
|---|---|---|
| committer | Andrei Zmievski <andrei@php.net> | 1999-10-04 21:10:26 +0000 | 
| commit | cb78ebc0de9ecfdcd00a18ab0745bf2827ba9dbf (patch) | |
| tree | 4544fd1d67b0a485b74883d937e3faebe57508b9 | |
| parent | cec7e90996100e3e952943aa95992ad0c81a772a (diff) | |
| download | php-git-cb78ebc0de9ecfdcd00a18ab0745bf2827ba9dbf.tar.gz | |
Taken from PHP3 source.
| -rw-r--r-- | ChangeLog | 1 | ||||
| -rw-r--r-- | ext/standard/basic_functions.c | 69 | ||||
| -rw-r--r-- | ext/standard/basic_functions.h | 2 | 
3 files changed, 72 insertions, 0 deletions
@@ -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);  | 
