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" <[EMAIL PROTECTED]>
To: "Andrey Hristov" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
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
>
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php