За последние 24 часа нас посетили 62932 программиста и 1746 роботов. Сейчас ищет 801 программист ...

генератор случайных неповторяющихся чисел

Тема в разделе "Прочие вопросы по PHP", создана пользователем fastdeath, 3 июн 2010.

  1. fastdeath

    fastdeath Активный пользователь

    С нами с:
    16 май 2009
    Сообщения:
    47
    Симпатии:
    0
    Помогите , плиз....
    начал писать генератор случайных неповторяющихся чисел , запись в файл....
    хз почему не работает.... выдаёт дубликаты....
    PHP:
    1. <?php
    2. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    3. $chislo=mt_rand(1,30);
    4. $file = fopen($_SERVER["DOCUMENT_ROOT"]."/chisla.php","a+");
    5. $str= fread($file) ;
    6. if (!strpos($str,'..'.$chislo.'..') ) {
    7. $yes=$chislo; }
    8. else {
    9. while(strpos($str,'..'.$chislo.'..'))  {
    10. $chislo=mt_rand(1,30);}
    11. $yes=$chislo;}
    12.  
    13.  
    14.  
    15.  
    16. if (!strpos($str,'..'.$yes.'..') ) {
    17. fwrite($file, '..'.$yes.'..');
    18. fclose($file);
    19. }
    20.  
    21. echo $yes;
    22.  
    23. }
    24. ?>
    25. <form method="POST" action="<?=$_SERVER['PHP_SELF']?>">
    26.  
    27. <input type="submit" value="Узнать!">
    28.  
    29. </form>
    :x
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    PHP:
    1. <?php
    2.  
    3. $steps = mt_rand(1, 30);
    4. $results = array();
    5.  
    6. while(--$steps) {
    7.  $results[] = $steps;
    8. }
    9.  
    10. shuffle($results);
    11.  
    12. echo join("\r\n", $results);
    13.  
    14. ?>
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1)В переменную $str что-нибудь приходит?
    2)Проверка (!strpos(...)) некорректна:
    http://ru2.php.net/manual/en/function.strpos.php
    3)Может удобнее будет воспользоваться функциями file_get_contents и file_put_contents?
     
  4. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Apple
    1)Может тогда проще
    PHP:
    1. <?php
    2. $results=range(1,30);
    3. shuffle($results);
    4. ?>
     
  5. fastdeath

    fastdeath Активный пользователь

    С нами с:
    16 май 2009
    Сообщения:
    47
    Симпатии:
    0
    ммм , ваши варианты возвращают не 30 чисел , а n - ое число.....
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А самому сложно переделать на 30?
     
  7. lev savranskiy

    lev savranskiy Активный пользователь

    С нами с:
    9 дек 2009
    Сообщения:
    18
    Симпатии:
    0
    $n = 30;
    $data = range(1, 999);
    $rand = array_rand($data,$n);

    for($i=0; $i<$n; $i++)
    {
    echo $rand[$i]."<br>";
    }
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?php
    2. function getUnqRand()
    3. {
    4.     static $gens = array();
    5.     $min = 1;
    6.     $max = 1000;
    7.     if (count($gens) < $max-$min) {
    8.         while (1) {
    9.             $new = rand(1, 10000);
    10.             if (!in_array($new, $gens)) {
    11.                 $gens[] = $new;
    12.                 return $new;
    13.             }
    14.         }
    15.     }
    16.     return false;
    17. }
    :D