summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Zmievski <andrei@php.net>1999-10-04 21:10:26 +0000
committerAndrei Zmievski <andrei@php.net>1999-10-04 21:10:26 +0000
commitcb78ebc0de9ecfdcd00a18ab0745bf2827ba9dbf (patch)
tree4544fd1d67b0a485b74883d937e3faebe57508b9
parentcec7e90996100e3e952943aa95992ad0c81a772a (diff)
downloadphp-git-cb78ebc0de9ecfdcd00a18ab0745bf2827ba9dbf.tar.gz
Taken from PHP3 source.
-rw-r--r--ChangeLog1
-rw-r--r--ext/standard/basic_functions.c69
-rw-r--r--ext/standard/basic_functions.h2
3 files changed, 72 insertions, 0 deletions
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);