Re: cvs: php4 /ext/standard basic_functions.c php_string.h string.c
| From: | Andrey Hristov | Date: | Wed, 25 Sep 2002 19:43:06 +0000 |
| Subject: | Re: cvs: php4 /ext/standard basic_functions.c php_string.h string.c | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-14217@lists.php.net to get a copy of this message | ||
Consider this code :
<?php
$j = 0;
while ($j++<10) {
$i = 0;
$s = "abcdef";
$a = array();
while ($i++<720) {
$a[] = str_shuffle($s);
}
var_dump(count(array_unique($a)));
$i = 0;
$ar =
array('a','b','c','d','e','f');
$c = array();
while ($i++<720) {
$b = $ar;
shuffle($b);
$c[] = implode('',$b);
}
var_dump(count(array_unique($c)));
echo "\n";
}
?>
I am trying to compare. On my machine i got this :
int(444)
int(453)
int(447)
int(454)
int(455)
int(451)
int(444)
int(464)
int(454)
int(451)
int(455)
int(465)
int(454)
int(464)
int(450)
int(455)
int(455)
int(450)
int(458)
int(446)
In 4 of 10 str_shuffle() shuffles better than array_shuffle().
It looks like that the unique combinations depend on the machine because
this test is performed on my work machine under vmware.
I said that the shuffling method is like shuffle()'s in 4.2.1 but like.
In 4.2.1 it was just php_rand(TSRMLS_C) %2 1:-1
I tried first with this and on every 3-4 runs I got the same string, so I
decided
to modify. As far as I can see from my tests the result is not bad compared
to
shuffle().
Best regards
Andrey Hristov
----- Original Message -----
From: "Adam Maccabee Trachtenberg" <adam@trachtenberg.com>
To: "Andrey Hristov" <andrey@webgate.bg>
Cc: <php-cvs@lists.php.net>
Sent: Wednesday, September 25, 2002 10:11 PM
Subject: Re: [PHP-CVS] cvs: php4 /ext/standard basic_functions.c
php_string.h string.c
> I think it would be better to either use a correct algorithm or not to
> add this function at all. I think it's a reasonable expectation on a
> user's part to assume that foo_shuffle() actually does a proper
> shuffle. We got all sorts of complaints about the array shuffling code
> being broken.
>
> -adam
>