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. BlackHacker - 25 Декабря, 2016 - 00:36:00 - перейти к сообщению
Почему array_rand генерирует одинаковые числа? Повторяются примерно через 5-10 вызовов функции, и в том же порядке.
2. Строитель - 02 Января, 2017 - 19:25:10 - перейти к сообщению
BlackHacker, чтобы избегать повторений, нужно удалять из массива значения, которые были получены. По такому принципу
PHP:
скопировать код в буфер обмена
  1. $arr = range(1, 10);
  2. $str = '<ol>';
  3.  
  4. for ($i = 0, $j = count($arr); $i++ < $j;) {
  5.     $key = array_rand($arr);
  6.     $str .= '<li>'. $arr[$key] .'</li>';
  7.     unset($arr[$key]);
  8. }
  9.  
  10. $str .= '</ol>';
  11.  
  12. echo $str;
3. BlackHacker - 05 Января, 2017 - 11:59:01 - перейти к сообщению
Строитель пишет:
BlackHacker, чтобы избегать повторений, нужно удалять из массива значения, которые были получены. По такому принципу
PHP:
скопировать код в буфер обмена
  1. $arr = range(1, 10);
  2. $str = '<ol>';
  3.  
  4. for ($i = 0, $j = count($arr); $i++ < $j;) {
  5.     $key = array_rand($arr);
  6.     $str .= '<li>'. $arr[$key] .'</li>';
  7.     unset($arr[$key]);
  8. }
  9.  
  10. $str .= '</ol>';
  11.  
  12. echo $str;


У меня за один раз бралось только одно значение из массива (префикс к логину, два рандомных слова для логина, прокси, user-agent), каждое значение сохранялось в базу. и вот через 5-7 сохранений весь рандом начинал повторяться в точности у каждого значения. даже префикс и оба рандомных слова одинаковые брались. я первое сообщение в теме исправил, приводил ранее там код, но сначала понять не мог, почему рандом повторялся. затем нашел тему 2007 года, где человек интересовался точно таким же вопросом. и более упоминания о таком баге не видел. да он и не встречается вроде нигде больше, проверил на другом дистрибутиве php с такой же версией. сейчас заменил везде array_rand на mt_rand, повторений больше не было.

 

Powered by ExBB FM 1.0 RC1