Devin129 Posted October 11, 2013 Share Posted October 11, 2013 I have been trying to figure this out for a while now, so I'm here for help, I am very new to PHP so this is probably pretty simple. I need to generate 5 Sets of numbers non repeating, for a php script im creating. I'm supposed to use the rand() function and each set of numbers is supposed to be in its own array. So how do I create these 5 arrays that will generate random, nonrepeating integers 1-50? I started with this: <?php $random = rand(1,50); $set1=array("$random","$random","$random","$random","$random"); print "$set1[1]"; print "$set1[2]"; print "$set1[3]"; print "$set1[4]"; print "$set1[5]"; ?> - However this obviously will print the same random number, how do I modify it to create the array with 5 unique random numbers in each like below? Auto-Pick 1: 8 12 22 33 45 Auto-Pick 2: 5 15 25 34 48 Auto-Pick 3: 7 12 28 38 42 Auto-Pick 4: 2 13 27 35 49 Auto-Pick 5: 1 18 21 33 50 Link to comment https://forums.phpfreaks.com/topic/282901-generating-random-non-repeating-array/ Share on other sites More sharing options...
requinix Posted October 11, 2013 Share Posted October 11, 2013 Are you specifically supposed to use rand() or can you use something else? For rand() you have to loop for however many you want (like with a for loop) but as you generate numbers only keep ones you haven't used before. That means multiple calls to rand(), not just reusing the same value from one call. While this seems like a good solution, it can be very slow (imagine if you have to generate a set of 10 numbers from 1-10 - that last one could take a while to finish) and you could accidentally hit an infinite loop (if you tried to get 10 numbers from 1-9). A better solution is to generate an array of all the numbers you can choose from, like using range, then a] If you need them in random order, shuffle that array and extract however many you want, or b] If you don't need random order, like your examples show, randomly choose numbers from the array (whose algorithm is much more effective than trying to rand() your way through it). Link to comment https://forums.phpfreaks.com/topic/282901-generating-random-non-repeating-array/#findComment-1453619 Share on other sites More sharing options...
Devin129 Posted October 11, 2013 Author Share Posted October 11, 2013 Yes, unfortunately my instructions specifically say to use the rand() function. <?php $rand1 = rand(1,50); $rand2 = rand(1,50); $rand3 = rand(1,50); $rand4 = rand(1,50); $rand5 = rand(1,50); $set1=array("$rand1","$rand2","$rand3","$rand4","$rand5"); print "$set1[1]\n"; print "$set1[2]\n"; print "$set1[3]\n"; print "$set1[4]\n"; print "$set1[5]\n"; ?> I now have this so now my issue is the non-repeating part. Is the in_array function what I'm looking for? Link to comment https://forums.phpfreaks.com/topic/282901-generating-random-non-repeating-array/#findComment-1453620 Share on other sites More sharing options...
requinix Posted October 11, 2013 Share Posted October 11, 2013 Yes. But you need a loop because you don't know how many times you'll have to try until you get a unique number. Link to comment https://forums.phpfreaks.com/topic/282901-generating-random-non-repeating-array/#findComment-1453622 Share on other sites More sharing options...
Devin129 Posted October 12, 2013 Author Share Posted October 12, 2013 <?php $set1=array(); $set2=array(); $set3=array(); $set4=array(); $set5=array(); for ($set1=0; $set1<5; $set1++) { echo " $set1 \n"; } Okay I have the for loop and it prints 4 numbers, I am still confused on how to randomize and make unique :/ Link to comment https://forums.phpfreaks.com/topic/282901-generating-random-non-repeating-array/#findComment-1453623 Share on other sites More sharing options...
.josh Posted October 12, 2013 Share Posted October 12, 2013 $numbers = array(); while(count($numbers)<25) { array_push($numbers, rand(1,50)); $numbers = array_unique($numbers); } $numbers = array_chunk($numbers, 5); echo "<pre>"; print_r($numbers); Link to comment https://forums.phpfreaks.com/topic/282901-generating-random-non-repeating-array/#findComment-1453625 Share on other sites More sharing options...
.josh Posted October 12, 2013 Share Posted October 12, 2013 more efficient method since it doesn't rely on luck to fill it up $range = range(1,50); shuffle($range); for ($x=0;$x<25;$x++) { $n = array_splice($range,rand(0,count($range)-1),1); $numbers[] = $n[0]; } $numbers = array_chunk($numbers,5); echo "<pre>"; print_r($numbers); I assume your teacher didn't say how to use rand(), only to include it... Link to comment https://forums.phpfreaks.com/topic/282901-generating-random-non-repeating-array/#findComment-1453627 Share on other sites More sharing options...
Devin129 Posted October 12, 2013 Author Share Posted October 12, 2013 Well the thing is after i Generate these 5 sets, I have to compare them with the winning numbers to see if they are a match. Will this still work if I use your efficient method using range and shuffle? Also how do I get it to only display the numbers and nothing else?? I need it to look like this on the output Auto-Pick 1: 8 12 22 33 45 Auto-Pick 2: 5 15 25 34 48 Auto-Pick 3: 7 12 28 38 42 Auto-Pick 4: 2 13 27 35 49 Auto-Pick 5: 1 18 21 33 50 Link to comment https://forums.phpfreaks.com/topic/282901-generating-random-non-repeating-array/#findComment-1453629 Share on other sites More sharing options...
Devin129 Posted October 12, 2013 Author Share Posted October 12, 2013 These are the exact instructions. Please help if possible I am stuck and have been for hours.. You are to create a lottery simulation program. The initial page welcomes the player to the game. Use a very simple form with an explanatory heading then just a field for the player’s name and a button to begin the play. The PHP script should generate five sets of five random numbers (use the rand() function, placing the numbers for each set in a separate array) and display them in the browser. Once the players numbers are generated, a separate set of five “computer generated“ winning numbers are displayed a few lines below and identified as the winning draw for the day. Using for loops and comparing the numbers in each set to the winning set, the script will then check to see if the player has won based on whether their auto picks match 3, 4 or all 5 of the winning numbers. Give them some the option to play as many times as they want by hitting the back button on their browser. It will look something like this when displayed, you can dress it up as you please. By the way, this is not a winning ticket: Auto-Pick 1: 8 12 22 33 45 Auto-Pick 2: 5 15 25 34 48 Auto-Pick 3: 7 12 28 38 42 Auto-Pick 4: 2 13 27 35 49 Auto-Pick 5: 1 18 21 33 50 Today’s Winning Picks: 9 11 29 40 41 All random number sets must follow this rule: 1. Numbers cannot be duplicated within a set. 2. No number can be zero. Winners: Let the user know (by name) how they did (win or lose) by showing them the number of matches to the winning numbers in each set. Prizes are as follows: 1. 3 numbers match = wins $100,000 2. 4 numbers match = wins $250,000 3. 5 numbers match= wins JACKPOT!! $1,000,000 4. Less than 3 numbers matching, no winner. Link to comment https://forums.phpfreaks.com/topic/282901-generating-random-non-repeating-array/#findComment-1453630 Share on other sites More sharing options...
.josh Posted October 12, 2013 Share Posted October 12, 2013 okay seriously, i did the hard part for you - not that even that was hard. All you need is 2 loops, a condition and an echo; php 101. Make an effort man, or else why are you even bothering taking the class? Link to comment https://forums.phpfreaks.com/topic/282901-generating-random-non-repeating-array/#findComment-1453631 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.