Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Генерация уникальных чисел
Форумы портала PHP.SU » » Вопросы новичков » Генерация уникальных чисел

Страниц (1): [1]
 

1. ilya2231 - 12 Июня, 2016 - 00:44:33 - перейти к сообщению
Добрый день! Я только начинаю постигать php. Запутался сейчас с таким моментом: создал генератор числе с помощью функции mt_rand. Проблема в том, что не знаю, как сделать проверку уникальности сгенерированных чисел, отсеить повторяющиеся и сгенерировать по новой недостающее количество. Помогите пожалуйста решить задачу. Вот код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $even = $_POST['even'];
  4. $odd = $_POST['odd'];
  5. $number = $_POST['pir'];
  6. $start2 = $_POST['start2'];
  7. $end2 = $_POST['end2'];
  8. function clean($value = "") {
  9.     $value = trim($value); //для удаления пробелов из начала и конца строки
  10.     $value = stripslashes($value); //для удаления экранированных символов ("Ваc зовут O\'reilly?" => "Вас зовут O'reilly?")
  11.     $value = strip_tags($value); //для удаления HTML и PHP тегов
  12.     $value = htmlspecialchars($value); //преобразует специальные символы в HTML-сущности ('&' преобразуется в '&' и т.д.)
  13.    
  14.     return $value;
  15. }
  16. $number = clean($number);
  17. $start2 = clean($start2);
  18. $end2 = clean($end2);
  19. for ($i=1; $i<=$number; $i++){
  20. if ($number>300) {
  21.     echo '<span style="display:inline-block; margin-left:20px; margin-bottom:20px;">Максимальное количество сгенерированных чисел не может больше 100</span>';
  22. exit();
  23. }
  24. elseif ($end2 <= $start2) {
  25.     echo '<span style="display:inline-block; margin-left:20px; margin-bottom:20px;">Введите второе число диапазона большее, чем первое.</span>';
  26.     exit();
  27. }
  28.  
  29. $num1 = mt_rand($start2, $end2);
  30.  
  31. if (isset($even) or isset($odd)) {
  32. if (isset($even)) {
  33. if ($num1 % 2 == 0) {
  34.      echo '<span style="display:inline-block; margin-left:20px; margin-bottom:20px;">'.$num1.'</span>';    
  35. }
  36. else {
  37.     $numeven = $num1 +1;    
  38.     echo '<span style="display:inline-block; margin-left:20px; margin-bottom:20px;">'.$numeven.'</span>';    
  39. }    
  40. }
  41. elseif (isset($odd)) {
  42. if ($num1 % 2 !== 0) {
  43.      echo '<span style="display:inline-block; margin-left:20px; margin-bottom:20px;">'.$num1.'</span>';
  44. }
  45. else {
  46.     $numodd = $num1 - 1;    
  47.     echo '<span style="display:inline-block; margin-left:20px; margin-bottom:20px;">'.$numodd.'</span>';
  48. }    
  49. }  
  50. }
  51.     else {
  52.         echo '<span style="display:inline-block; margin-left:20px; margin-bottom:20px;">'.$num1.'</span>';
  53. }
  54. }
  55. ?>
  56.  
2. Bio man - 12 Июня, 2016 - 02:28:13 - перейти к сообщению
Самый простой способ получить уникальное число http://php.net/manual/ru/function.microtime.php

Не понятно что требуется
3. ilya2231 - 12 Июня, 2016 - 14:13:33 - перейти к сообщению
Bio man пишет:
Самый простой способ получить уникальное число http://php.net/manual/ru/function.microtime.php

Не понятно что требуется

Сейчас генерируются числа с помощью mt_rand, но они не уникальны. Вот мне хотелось бы сделать проверки уникальности числа. Если число неуникально, то пегенерировать его
4. kuller - 12 Июня, 2016 - 17:59:36 - перейти к сообщению
[quote=ilya2231][/quote] для уникальности надо проверять не было ли оно раньше сгенерировано. Для этого числа сгенерированные надо писать в базу, и сверять их на уникальность. Советую заранее заготовить список чисел, и их выдавать просто.
5. Строитель - 12 Июня, 2016 - 20:33:00 - перейти к сообщению
ilya2231 пишет:
Вот мне хотелось бы сделать проверки уникальности числа. Если число неуникально, то перегенерировать его
В таких случаях, я думаю, правильнее было бы собрать все значения в массив, а потом случайным образом их выбирать из массива, при этом те значения, которые были выбраны, удалять из массива. При таком подходе вы получите рандомный выбор без повторений.

 

Powered by ExBB FM 1.0 RC1