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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Как сделать проверку и вывод только уникальных чисел после генерации
ilya2231
Отправлено: 12 Июня, 2016 - 00:44:33
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июнь 2016  


Помог: 0 раз(а)




Добрый день! Я только начинаю постигать 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.  

(Отредактировано автором: 12 Июня, 2016 - 00:45:23)

 
 Top
Bio man
Отправлено: 12 Июня, 2016 - 02:28:13
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Самый простой способ получить уникальное число http://php.net/manual/ru/function.microtime.php

Не понятно что требуется
 
 Top
ilya2231
Отправлено: 12 Июня, 2016 - 14:13:33
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июнь 2016  


Помог: 0 раз(а)




Bio man пишет:
Самый простой способ получить уникальное число http://php.net/manual/ru/function.microtime.php

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

Сейчас генерируются числа с помощью mt_rand, но они не уникальны. Вот мне хотелось бы сделать проверки уникальности числа. Если число неуникально, то пегенерировать его
 
 Top
kuller
Отправлено: 12 Июня, 2016 - 17:59:36
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




[quote=ilya2231][/quote] для уникальности надо проверять не было ли оно раньше сгенерировано. Для этого числа сгенерированные надо писать в базу, и сверять их на уникальность. Советую заранее заготовить список чисел, и их выдавать просто.
 
 Top
Строитель Модератор
Отправлено: 12 Июня, 2016 - 20:33:00
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 74 раз(а)




ilya2231 пишет:
Вот мне хотелось бы сделать проверки уникальности числа. Если число неуникально, то перегенерировать его
В таких случаях, я думаю, правильнее было бы собрать все значения в массив, а потом случайным образом их выбирать из массива, при этом те значения, которые были выбраны, удалять из массива. При таком подходе вы получите рандомный выбор без повторений.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB