inVINCEable Posted April 18, 2009 Share Posted April 18, 2009 Hey everyone, Ok, So I have a program that generates random paragraphs of sentences arranged in files. Each file has about 30 sentences, and I am generating a random sentence from each file. The only problem is, it does not appear to be random at all. After about 15 random paragraph generations, I get the EXACT same order as one previously generated. I must be doing something wrong because the probability of this happening is about 1:9,000,000,000,000, and it has happened two days in a row, about six times. Please take a look at this simple script and offer some advice, it would be greatly appreciated. Perhaps I am just not seeding the random number generator properly? Who knows, thanks again! <html> <head> <?php //EDIT BELOW $current_name = "Linda"; $postingemail = "linda.clark+"; $title = array_map("trim", file("title.txt")); $titlepost = $title[array_rand($title)]; $intro = array_map("trim", file("intro.txt")); $intropost = $intro[array_rand($intro)]; $token1 = array_map("trim", file("token1.txt")); $token1post = $token1[array_rand($token1)]; $token2 = array_map("trim", file("token2.txt")); $token2post = $token2[array_rand($token2)]; $token3 = array_map("trim", file("token3.txt")); $token3post = $token3[array_rand($token3)]; // //here is where we start the custom stuff that was not included // $token4 = array_map("trim", file("token4.txt")); $token4post = $token4[array_rand($token4)]; $token5 = array_map("trim", file("token5.txt")); $token5post = $token5[array_rand($token5)]; $token6 = array_map("trim", file("token6.txt")); $token6post = $token6[array_rand($token6)]; $token7 = array_map("trim", file("token7.txt")); $token7post = $token7[array_rand($token7)]; $token8 = array_map("trim", file("token8.txt")); $token8post = $token8[array_rand($token8)]; $token9 = array_map("trim", file("token9.txt")); $token9post = $token9[array_rand($token9)]; $token11 = array_map("trim", file("token11.txt")); $token11post = $token11[array_rand($token11)]; $token12 = array_map("trim", file("token12.txt")); $token12post = $token12[array_rand($token12)]; $token13 = array_map("trim", file("token13.txt")); $token13post = $token13[array_rand($token13)]; $token14 = array_map("trim", file("token14.txt")); $token14post = $token14[array_rand($token14)]; $token15 = array_map("trim", file("token15.txt")); $token15post = $token15[array_rand($token15)]; $token16 = array_map("trim", file("token16.txt")); $token16post = $token16[array_rand($token16)]; $token17 = array_map("trim", file("token17.txt")); $token17post = $token17[array_rand($token17)]; $email = array_map("trim", file("email.txt")); $emailpost = $email[array_rand($email)]; $emailpost = str_replace("%name%", $current_name, $emailpost); $price = array_map("trim", file("price.txt")); $pricepost = $price[array_rand($price)]; //EDIT ABOVE $number[]="1"; $number[]="2"; $number[]="3"; $number[]="4"; $number[]="5"; $number[]="6"; $number[]="7"; $number[]="8"; $number[]="9"; $numberpost = $number[array_rand($number)]; $numberpost1 = $number[array_rand($number)]; $numberpost2 = $number[array_rand($number)]; $numberpost3 = $number[array_rand($number)]; $numberpost4 = $number[array_rand($number)]; ?> <style> body { background-color:#000000; color:white; } </style> </head> <body> <center> <br><form><input type=button value="REFRESH" onClick="window.location.reload()"> <br> </form> <h2>CL Account </h2> <textarea name="textarea_head" id="textarea" cols="100" rows="1" onClick="this.focus(); this.select();"> <?php echo $postingemail; ?><?php echo $numberpost?><?php echo $numberpost1?><?php echo $numberpost2?><?php echo $numberpost3?><?php echo $numberpost4?>@gmail.com </textarea> <br> <h2>Ad Title </h2> <textarea name="textarea_head" id="textarea" cols="100" rows="1" onClick="this.focus(); this.select();"> <?php echo $titlepost?> </textarea> <br><br> <h2>Price </h2> <textarea name="textarea_head" id="textarea" cols="100" rows="1" onClick="this.focus(); this.select();"> <?php echo $pricepost?> </textarea> <br><br> <h2>Ad Body</h2> <textarea name="textarea_head" id="textarea" cols="100" rows="20" onClick="this.focus(); this.select();"> <?php echo $intropost?> <?php echo $token1post?> <?php echo $token2post?> <br><br> <b><?php echo $token3post?></b><br> - <?php echo $token6post?><br> - <?php echo $token7post?><br> - <?php echo $token8post?><br> - <?php echo $token9post?><br> - <?php echo $token11post?><br> - <?php echo $token12post?><br> - <?php echo $token13post?><br> - <?php echo $token14post?><br> - <?php echo $token4post?><br><br> <u><?php echo $token17post?></u><br> - <?php echo $token16post?><br> - <?php echo $token15post?><br> - <?php echo $token5post?><br> <br> <?php echo $emailpost?> </textarea> </body> Link to comment https://forums.phpfreaks.com/topic/154664-array_rand-not-really-random-is-there-a-better-way-to-grab-a-random-line/ Share on other sites More sharing options...
laffin Posted April 18, 2009 Share Posted April 18, 2009 From PHP.NET Reinoud Elhorst 10-Apr-2007 10:50 Please note that (at least in PHP 4.3.11), while each key from the source array has a equal chance of being picked, the order in which they are returned is NOT random. In an array with keys from one to 10, where 2 random keys are picked, 0 is picked as the first number 18.8% of the time, and only as second number in 1.1% of the time: $n=100000; $a=array(1,2,3,4,5,6,7,8,9,10); $b=array(); for($i=0;$i<sizeof($a);$i++) { $b[$i]=array(0,0); } for($i=0;$i<$n;$i++) { $keys=array_rand($a,2); $b[$keys[0]][0]++; $b[$keys[1]][1]++; } for ($i=0;$i<sizeof($b);$i++){ printf("%d: %04.1f%% %04.1f%% %04.1f%%", $i, ($b[$i][0]/$n*100),($b[$i][1]/$n*100),($b[$i][0]+$b[$i][1])/$n*100); } The result is: 0: 18.8% 01.1% 19.9% 1: 17.0% 03.3% 20.3% 2: 14.3% 05.7% 20.0% 3: 12.2% 07.9% 20.1% 4: 10.0% 10.0% 20.0% 5: 07.8% 12.0% 19.8% 6: 05.5% 14.5% 20.0% 7: 03.3% 16.6% 19.9% 8: 01.2% 18.9% 20.1% 9: 10.0% 09.9% 19.9% The workaround is adding a shuffle command to shuffle the keys: 0: 10.0% 10.0% 20.0% 1: 10.0% 10.0% 20.0% 2: 10.0% 10.0% 20.0% 3: 10.0% 10.0% 20.0% 4: 10.0% 10.0% 20.0% 5: 10.0% 10.0% 20.0% 6: 10.1% 10.0% 20.1% 7: 10.0% 10.0% 20.0% 8: 10.0% 10.0% 20.0% 9: 10.0% 10.0% 20.0% Link to comment https://forums.phpfreaks.com/topic/154664-array_rand-not-really-random-is-there-a-better-way-to-grab-a-random-line/#findComment-813348 Share on other sites More sharing options...
inVINCEable Posted April 19, 2009 Author Share Posted April 19, 2009 I see, but why would the EXACT same combination of lines be coming up? Link to comment https://forums.phpfreaks.com/topic/154664-array_rand-not-really-random-is-there-a-better-way-to-grab-a-random-line/#findComment-813857 Share on other sites More sharing options...
alphanumetrix Posted April 19, 2009 Share Posted April 19, 2009 Try shuffle(); I don't really know all that much about it, but I don't think the algorithms that create the "random" results are ACTUALLY random. I think its more "complexly shuffled around", to try and simulate a random result. Because actually, I don't think ANYTHING is truly random. Not even the flip of a coin. It can be controlled under certain circumstances. Therefore, I would presume that after so long, you would receive similar/the same results if your actual count your randomizing isn't changing. Again, just something I theorized. Don't know if it's true or not. Link to comment https://forums.phpfreaks.com/topic/154664-array_rand-not-really-random-is-there-a-better-way-to-grab-a-random-line/#findComment-814084 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.