summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
authorfoobar <sniper@php.net>2001-09-05 19:47:55 +0000
committerfoobar <sniper@php.net>2001-09-05 19:47:55 +0000
commit42b5521af505eaddfd4891703da8120865896258 (patch)
treec80bb41e38dba221361ce7eb504f28eb557014bd /ext/standard/array.c
parent24b54b866fc36fed094c1f455e0174c99c24ee40 (diff)
downloadphp-git-42b5521af505eaddfd4891703da8120865896258.tar.gz
revert bad commit.
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 9e4d1e2c7e..83942db409 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -1376,15 +1376,12 @@ PHP_FUNCTION(range)
/* }}} */
-static int array_data_shuffle(const void *a, const void*b)
-{
- TSRMLS_FETCH();
-
- return php_rand_range(0,1 TSRMLS_CC) ? 1 : -1;
+static int array_data_shuffle(const void *a, const void*b) {
+ return (php_rand() % 2) ? 1 : -1;
}
-/* {{{ proto bool shuffle(array array_arg)
+/* {{{ proto int shuffle(array array_arg)
Randomly shuffle the contents of an array */
PHP_FUNCTION(shuffle)
{
@@ -2719,12 +2716,10 @@ PHP_FUNCTION(array_multisort)
/* {{{ proto mixed array_rand(array input [, int num_req])
Return key/keys for random entry/entries in the array */
-
-/* FIXME:The algorithm used is bogus! */
PHP_FUNCTION(array_rand)
{
zval **input, **num_req;
- double randval;
+ long randval;
int num_req_val, num_avail, key_type;
char *string_key;
uint string_key_len;
@@ -2763,10 +2758,17 @@ PHP_FUNCTION(array_rand)
zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
while (num_req_val && (key_type = zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), &string_key, &string_key_len, &num_key, 0, &pos)) != HASH_KEY_NON_EXISTANT) {
-
+#ifdef HAVE_RANDOM
+ randval = random();
+#else
+#ifdef HAVE_LRAND48
+ randval = lrand48();
+#else
+ randval = rand();
+#endif
+#endif
- randval = php_drand(TSRMLS_C);
- if (randval < (double)num_req_val/(double)num_avail) {
+ if ((double)(randval/(PHP_RAND_MAX+1.0)) < (double)num_req_val/(double)num_avail) {
/* If we are returning a single result, just do it. */
if (Z_TYPE_P(return_value) != IS_ARRAY) {
if (key_type == HASH_KEY_IS_STRING) {