За последние 24 часа нас посетили 37926 программистов и 1807 роботов. Сейчас ищут 850 программистов ...

функция rand()

Тема в разделе "PHP для новичков", создана пользователем dazik, 30 июл 2008.

  1. dazik

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

    С нами с:
    16 июл 2008
    Сообщения:
    26
    Симпатии:
    0
    вопрос.. можно например чтоб у меня выводилось случайное число от 0 до 9 но кроме 3-ки например ?

    Код (Text):
    1. rand(0,9);
     
  2. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
  3. dazik

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

    С нами с:
    16 июл 2008
    Сообщения:
    26
    Симпатии:
    0
    ога.. спс.. а вот если так.. например 3-ка будет не постоянной... тоесть один раз запустил скрипт.. 3-ку не выдаст, 2 раз запустил. 4-ку не выдаст или 9 ... тоесть число которое не выдаст будет тоже рандомом !
     
  4. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    dazik
    PHP:
    1. <?=($i=rand(0,9))==3?4:$i;?>
    :lol:
     
  5. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    PHP:
    1. <?
    2. while (!isset($num) || $num == 3) {
    3.     $num = mt_rand(0, 9);
    4. }
    5. ?>
    То?

    upd: не понял, щас напишу нормальный ответ.
     
  6. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    [vs], +1. :)
     
  7. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    PHP:
    1.  
    2. <?
    3. $num = $not_me = mt_rand(0, 9);
    4. while ($num == $not_me) {
    5.     $num = mt_rand(0, 9);
    6. }
    7. ?>
    8.  
    Так, что ли? :)
     
  8. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?=($i=rand(0,9))==($r=rand(0,9))?rand($i,$r):$i;?>
     
  9. dazik

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

    С нами с:
    16 июл 2008
    Сообщения:
    26
    Симпатии:
    0
    чё - то не могу понять оба ваших поста ))) !!
     
  10. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    PHP:
    1. <?
    2. $not_me = mt_rand(0, 9);
    3. $nums = range(0, 9);
    4. unset($nums[$not_me]);
    5. echo array_rand($nums);
    6. ?>
    [vs], них не понял, видимо я тупой.
     
  11. dazik

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

    С нами с:
    16 июл 2008
    Сообщения:
    26
    Симпатии:
    0
    вообщем расскажу по подробней,..

    есть 4-х значное число.. которое форируеться рандомом... каждая цифра формируеться отдельно..

    это лотерея. и по этому надо чтоб при формировании цифры.. какая-то одна не выдавалась... а чтоб не было палева.. надо чтоб не выдавалась всё время разная ))
     
  12. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Вам нужно 4 цифры, и все чтобы не были, например, 3?
     
  13. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    dazik
    Первый не разрешает тройке появляться, второй не разрешает случайно выбранному числу появляться.
     
  14. dazik

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

    С нами с:
    16 июл 2008
    Сообщения:
    26
    Симпатии:
    0
    вообщем... например число 2345 нужно например чтоб первая цифра не была 3. при ещё одном выполнении скрипта она не была 5 например !
     
  15. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Хорошо давайте сделаем по-человечески. Как я понял, надо 4 уникальных цифры?
    PHP:
    1. <?php
    2. function get_number()
    3. {
    4.  $rand_array=array();
    5.  for($i=0;$i<4;$i++)
    6.  {
    7.    $rand=rand(0,9);
    8.    if(in_array($rand,$rand_array))
    9.    {
    10.      $i--;
    11.      continue;
    12.    }
    13.    else
    14.    {
    15.      $rand_array[]=$rand;
    16.    }
    17.  }
    18.  return implode($rand_array);
    19. }
    20. echo get_number();
    21. ?>
     
  16. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    [vs], если 4 уникальные цифры, то:
    PHP:
    1. <?
    2. echo join("", array_rand(range(0, 9), 4));
    3. ?>
    Всё гениальное просто. :)
     
  17. dazik

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

    С нами с:
    16 июл 2008
    Сообщения:
    26
    Симпатии:
    0
    вообщем так..

    начну с 0.

    есть лотерея.. человек покупает билет за 1 грн. билет представляет собой 4-х значное число которое формируетья рандомом.


    вот например куплено 100 билетов.

    выйгрыш вычисляеться следующим образом. например совпала одна цифра, стоящая в том-же порядке что и в билете.. например выйгрышный билет 2345 а мой билет 6396 - я выйграл.. если же совпадают 2 цифры.. так же стоящие в одном порядке с выйгрышными то 10 грн. если 3 цифры то 100 грн. а если 4 то джек пот.. так вот надо ессно сформировать такое выйгрышное число чтоб учасники как можно меньше выйграли...

    вот я и думаю.. значит просто не выдавать по одной цифре в билете.. это чтоб никогда не было джек-пота. но чтоб не было палева нужно эту цифру менять постояннло. вот и пока это единственное решение которое мне пришло.. может у кого-то есть ещё варианты ?
     
  18. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Первое что пришло в голову:
    PHP:
    1. <?
    2.  
    3. // выйгрышный
    4. $winner = "2345";
    5.  
    6. // результат
    7. $res = "";
    8.  
    9. // номер цифры в выйгрышном билете, которое мы не покажем
    10. $pos = mt_rand(0, 3);
    11.  
    12. // генерируем числа
    13. for ($i = 0; $i < 4; $i++) {
    14.     // здесь нельзя показать число $winner[$pos]
    15.     if ($i == $pos) {
    16.         $nums = range(0, 9);
    17.         unset($nums[(int) $winner[$pos]]);
    18.         $res .= array_rand($nums);
    19.     // покажем случайное
    20.     } else {
    21.         $res .= mt_rand(0, 9);
    22.     }
    23. }
    24.  
    25. echo $res
    26.  
    27. ?>
    Джекпота быть не должно.

    PS: давайте жить и работать честно! :)
     
  19. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    dazik
    Мммм коммерческй проект... я тебе накатаю систему расчетов с заданием самых разных параметров, если только предварительно поделишьсо :)
     
  20. dazik

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

    С нами с:
    16 июл 2008
    Сообщения:
    26
    Симпатии:
    0
    да дело не в поделишься// дело в том что самому хочеться написать// интересно ж !
     
  21. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    dazik
    Тебе нужны только циклы, условия, массивы и пара функций. Для красивости можно все это тоже одеть в функцию. Сложного кода там нет, там только логика.
     
  22. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    dazik
    мм, ну так и пиши сам)
     
  23. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    dazik
    Тебе нужны только циклы, условия, массивы и пара функций. Для красивости можно все это тоже одеть в функцию. Сложного кода там нет, там только логика.
     
  24. dazik

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

    С нами с:
    16 июл 2008
    Сообщения:
    26
    Симпатии:
    0
    так я и пишу см.. просто были проблемы с рандомом.. вот и попросил помочь.. а вообще я всё решил по другому )))) вообще не так )) додумал сам ))
     
  25. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    dazik

    а выигрышная комбинация то откуда берется?