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 :: mt_rand() генерация чисел

 PHP.SU

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


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

> Без описания
ybiza
Отправлено: 05 Января, 2011 - 02:30:20
Post Id


Новичок


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


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




mt_rand() использую для генерации чисел, но вот задача, есть таблица MySql 3 записи
мне необходимо генерировать 3 числа чтобы не одно из них не повторялось в любом порядке. Делаю так -
PHP:
скопировать код в буфер обмена
  1.  
  2. $num = mysql_num_rows(mysql_query("SELECT `id` FROM `table`"));
  3. $rnd1 = mt_rand(1,$num);
  4. $rnd2 = mt_rand(1,$num);
  5. $rnd3 = mt_rand(1,$num);
  6.  

Напишите как сделать это чудо! Что можно использовать и как?
 
 Top
Реф
Отправлено: 05 Января, 2011 - 02:41:07
Post Id



Частый гость


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


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




Пусть $num == 5, тогда
PHP:
скопировать код в буфер обмена
  1. $rnd1 = mt_rand(1,$num); // Случайное число в диапазоне 1 - 5
  2. $rnd2 = mt_rand(1,$num); // Случайное число в диапазоне 1 - 5
  3. $rnd3 = mt_rand(1,$num); // Случайное число в диапазоне 1 - 5


Все три числа хоть и случайны, но они из одного диапазона, а значит могут совпасть.

Вариант решения: получать сулчайные числа из диапазонов (1;$num/3), ($num/3+1; 2*$num/3) и (2*$num/3 +1, $num)


-----
Думать надо головой, а не головкой!
 
 Top
OrmaJever Модератор
Отправлено: 05 Января, 2011 - 02:47:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




PHP:
скопировать код в буфер обмена
  1. $num = 5;
  2. $rnd1 = mt_rand(0,$num);
  3. while(1==1)
  4. {
  5.         $rnd2 = mt_rand(0,$num);
  6.         if($rnd2 != $rnd1) break;
  7. }
  8.  
  9. while(1==1)
  10. {
  11.         $rnd3 = mt_rand(0,$num);
  12.         if($rnd3 != $rnd1 && $rnd3 != $rnd2) break;
  13. }
  14. echo $rnd1, '<br>', $rnd2, '<br>', $rnd3;


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
ybiza
Отправлено: 05 Января, 2011 - 07:54:27
Post Id


Новичок


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


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




OrmaJever! Спасибо большое то что нужно! Работает как часы!
 
 Top
Ch_chov
Отправлено: 05 Января, 2011 - 16:50:48
Post Id



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


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




PHP:
скопировать код в буфер обмена
  1. $num = 10;
  2. $rnd = range(1, $num);
  3. shuffle($rnd);
  4. $rnd1 = $rnd[0];
  5. $rnd2 = $rnd[1];
  6. $rnd3 = $rnd[2];
 
 Top
JustUserR
Отправлено: 06 Января, 2011 - 01:36:11
Post Id



Активный участник


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


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




ybiza В качестве возможного допустимого простого решения позволяющего осуществлять получение списка индексов элементов из заданного диапазона с условием сохранения равномерного распределения случайное величины и обеспечения отсутствия повторения полученных значений - допустимо осуществление создание специального индексного массива включающего последовательные включения выбираемых идентификаторов - и обеспечить его дальнейшую случайную перестановку средствам функции shuffle - после чего обращение к последовательным внешним индексам полученного значения предоставляют получение случайных чисел отвечающих оригинальным требованиям


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ytrewq123
Отправлено: 09 Ноября, 2014 - 11:09:40
Post Id


Посетитель


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


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




Здравствуйте!
Вот вопрос. В данном примере результат при нажатии кнопки генерируется функцией mt_rand. И он разный. А я бы хотел по порядку. Нажал 1 нажал ещё раз 2 Нажал ещё 3
1->2->3->1->2->3->
Что использовать в место mt_rand. Подскажите пожалуйста.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function fuf (){
  4. $z=('"<div style="width:111px; height:111px; background-color:red; "></div>"');
  5. $e=('"<div style="width:111px; height:111px; background-color:blue; "></div>"');
  6. $o= array ("$z",
  7.           " $e"
  8.            );
  9. for ($i=0; $i<1; $i++)
  10. $a=count($o);
  11. $dex = mt_rand(0, $a-1);
  12.  
  13. $znach= $o[$dex];
  14.  
  15. if(isset($_POST['poga'])){
  16.    
  17. echo "$znach";
  18.              
  19.   }}
  20. ?>
  21.  
  22.  
 
 Top
Viper
Отправлено: 09 Ноября, 2014 - 14:05:42
Post Id



Активный участник


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


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




ytrewq123

PHP:
скопировать код в буфер обмена
  1. for ($i=1, $n=10; $i<$n; $i++) {
  2.         echo $i;
  3. }


в вашем случае $dex = $i из примера.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
ytrewq123
Отправлено: 09 Ноября, 2014 - 17:18:49
Post Id


Посетитель


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


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




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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB