|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2012-05-06 11:42 UTC] bsnxff at gmail dot com
Description:
------------
run test_array_rand.php
Test script:
---------------
<?php
$array = array_fill(0, 1000, 'a');
echo rand(0 , 10000);
function ref(&$data = false)
{
global $array;
$data = &$array;
$a = randArray($data);
}
function randArray($data)
{
global $array;
//may be wrong here
$array[] = array_rand($array, 1);
return $data[rand(0, sizeof($data) - 1)];
}
$i = 1000;
while ($i--)
ref()
// Hi refresh it 3 - 10 times
// you will see
// random number no longer random
// 1 return 10
// 2 return 4453
// 3 return 1251
// 4 return 10
// 5 return 4453
// 6 return 1251
// ...
?>
Expected result:
----------------
make rand(0, 10000) random
Actual result:
--------------
rand(0, 10000) no longer random
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 03:00:02 2025 UTC |
Have you tested this case? rand() will return fixed values not random values. but mt_rand() works this is not what user expected. <?php $array = array_fill(0, 1000, 'a'); function ref(&$data = false) { global $array; $data = &$array; $a = randArray($data); } function randArray($data) { global $array; //may be wrong here $array[] = array_rand($array, 1); return $data[rand(0, sizeof($data) - 1)]; } $i = 1000; while ($i--) ref(); //echo mt_rand(0 , 10000); //echo "\n"; echo $array[rand(0, sizeof($array) - 1)]; ?>