logarkh Posted May 9, 2007 Share Posted May 9, 2007 Okay I'm trying the make a script that creates a 15 random but unique numbers between 11 and 99 and puts them in an array, once the script has created a random number it will get the korean words for those numbers and put them in another array so I'd end up with something like num[1] = 36 ans[1] = sorunyosot num[2] = 12 ans[2] = yoldool hana and yoldool being the korean for 36 and 12 respectfully. What the script actually does is create 15 random numbers and their korean, but they're not always unique. I'm currently getting this error: Notice: Undefined offset: 0 in /home/vhosts/quizsamples.atbhost.com/public_html/num_array.php on line 21 which refers to the while statement. So what I'm thinking is that I'm incorrectly pointing to the variables or something like that. Here's the code that I have <?php $arr = array("units" => array(1 => "hana", "dool", "set", "net", "tasot", "yosot", "ilgop", "yodol", "ahop"), "tens" => array(10 => "yol", 20 => "samul", 30 => "sorun", 40 => "mahun", 50 => "chiun", 60 => "yesun", 70 => "irrun", 80 => "yodun", 90 => "ahun"), "hundreds" => array(100 => "pek")); $ans = array(0 => 0); $a; $b; $c; for($a = 1; $a < 16; $a = $a + 1) { $var1 = rand(1,9)*10; $var2 = rand(1,9); $num = array($a => $var1 + $var2); $ans = array($a => $arr["tens"][$var1].$arr["units"][$var2]); for($b = 0; $b < $a - 1; $b = $b + 1) { while($num[$a] == $num[$b]) { $var1 = rand(1,9)*10; $var2 = rand(1,9); $num = array($a => $var1 + $var2); } } echo $num[$a].'<br />'.$ans[$a].'<br />'; } ?> Any ideas on how to correct it? Quote Link to comment https://forums.phpfreaks.com/topic/50660-solved-unique-number-generator-problem-with-variables-as-array-pointer-in-while-loop/ Share on other sites More sharing options...
per1os Posted May 9, 2007 Share Posted May 9, 2007 It is refering to the $num[$b] portion. What essentially is happening is there is no value of $num[$b] set in the $num array. Since that is an invalid index of that array the notice gets thrown telling you so. A way to avoid it is using the www.php.net/isset function. If you do not want to generally in production notices are turned off anyway. Quote Link to comment https://forums.phpfreaks.com/topic/50660-solved-unique-number-generator-problem-with-variables-as-array-pointer-in-while-loop/#findComment-249024 Share on other sites More sharing options...
Psycho Posted May 9, 2007 Share Posted May 9, 2007 Based upon what you said, I think you are making it a little harder than it needs to be. The following 5 lines of code (with comments removed) will generate an array with 15 random numbers from 11 to 99 - and they will be unique. <?php // Create empty array variable $num = array(); // Create a loop that will continue as long // as the array has less than 15 items while (count($num)<15) { // Generate rand number from 11 to 99 $randVar = rand(11,99); // If the rand number does not // exist in the array add it if (!in_array($randVar,$num)) { $num[] = $randVar; } } ?> Quote Link to comment https://forums.phpfreaks.com/topic/50660-solved-unique-number-generator-problem-with-variables-as-array-pointer-in-while-loop/#findComment-249047 Share on other sites More sharing options...
logarkh Posted May 9, 2007 Author Share Posted May 9, 2007 Ahh, thank you. I realised it was a complicated way but that's the only method I could come up with based on what I remember about php, it has been many years since I last used it. That script hopefully sorts out my problem, I just need to add the other stuff to it then I'll let you know and mark this as solved. Quote Link to comment https://forums.phpfreaks.com/topic/50660-solved-unique-number-generator-problem-with-variables-as-array-pointer-in-while-loop/#findComment-249051 Share on other sites More sharing options...
Psycho Posted May 9, 2007 Share Posted May 9, 2007 You just need to look at the manual ( http://www.php.net ). The one glaring overcomplication I saw was that you were generating separate numbers for the one's palce and the ten's place when the rand() function allows you to specify a min and a max. Quote Link to comment https://forums.phpfreaks.com/topic/50660-solved-unique-number-generator-problem-with-variables-as-array-pointer-in-while-loop/#findComment-249070 Share on other sites More sharing options...
logarkh Posted May 9, 2007 Author Share Posted May 9, 2007 Sorry I had to go to an interview, yeh I need it that way so that I can call the word for the tens number and the word for the units number from an array, unless there's another way to do that? Otherwise this is solved. Quote Link to comment https://forums.phpfreaks.com/topic/50660-solved-unique-number-generator-problem-with-variables-as-array-pointer-in-while-loop/#findComment-249273 Share on other sites More sharing options...
Psycho Posted May 9, 2007 Share Posted May 9, 2007 Ok, I didn't get that in your first post. I'd still use the same logic, but with some modifications. I think this is a but cleaner: <?php $arr = array( "units" => array(1 => "hana", "dool", "set", "net", "tasot", "yosot", "ilgop", "yodol", "ahop"), "tens" => array(10 => "yol", 20 => "samul", 30 => "sorun", 40 => "mahun", 50 => "chiun", 60 => "yesun", 70 => "irrun", 80 => "yodun", 90 => "ahun"), "hundreds" => array(100 => "pek") ); // Create empty array variable $num = array(); // Create a loop that will continue as long // as the array has less than 15 items while (count($num)<15) { // Generate rand numbers for ones and tens $units = rand(1,9); $tens = rand(1,9) * 10; $randVar = $tens + $units; // If the rand number does not // exist in the array add it if (!in_array($randVar,$num)) { $num[] = $randVar; } } //Extract & print the words foreach ($num as $value) { $tens_word = $arr[tens][$value-$value%10]; $units_word = $arr[units][$value%10]; $word = $tens_word . $units_word; echo $value . ": " . $word . "<br>"; } ?> Or, you could reduce all of that to just a few lines of code: <?php $num = array(); while (count($num)<15) { $randVar = rand(1,9) * 10 + rand(1,9); if (!in_array($randVar,$num)) { $num[] = $randVar; } } foreach ($num as $value) { $word = $arr[tens][$value-$value%10] . $arr[units][$value%10]; echo $value . ": " . $word . "<br>"; } ?> by the way, what is the hundereds item in the array for? Quote Link to comment https://forums.phpfreaks.com/topic/50660-solved-unique-number-generator-problem-with-variables-as-array-pointer-in-while-loop/#findComment-249370 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.