За последние 24 часа нас посетили 17598 программистов и 1722 робота. Сейчас ищут 923 программиста ...

формирование строки состоящей и трех случайных чисел

Тема в разделе "PHP для новичков", создана пользователем diez, 24 ноя 2009.

  1. diez

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

    С нами с:
    23 сен 2007
    Сообщения:
    9
    Симпатии:
    0
    Здравствуйте!

    Задача - формирование строки состоящей и трех случайных чисел, выбранных в заданном промежутке. Вроде чего-то там понаписал, но иногда вместо 3 формируется 2 или 4 числа в строке! Ошибка скорее всего где-то в логике, сижу туплю понять не могу. Вот собственно что есть:

    PHP:
    1. $random_id_array = array();
    2.     for ($i=1; $i<=3; $i++)
    3.         {
    4.             $random_num = rand (2,12);
    5.             array_push ($random_id_array,$random_num);
    6.         }
    7.         $random_id_array = array_unique($random_id_array);
    8.         $count = count($random_id_array);
    9.        
    10.             if ($count<3)
    11.                 {
    12.                    
    13.                     $skolko_nado= 3 - $count;
    14.                     for ($i=0; $i<=$skolko_nado; $i++)
    15.                     {
    16.                         $random_num  = rand (2,12);
    17.                         array_push ($random_id_array,$random_num);
    18.                         $random_id_array = array_unique($random_id_array);
    19.                        
    20.                     }
    21.                    
    22.                 }
    23.        
    24.                         $random_id_str = implode(",",$random_id_array);
    25.                         echo $random_id_str;

    Хочу отметить, что написанно не оптимально, если кто поможет буду признателен!
    Заранее спасибо!
     
  2. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    PHP:
    1. <?php
    2. $a=rand(1,10);
    3. $b=rand(1,10);
    4. $c=rand(1,10);
    5. $d=$a.$b.$c;
    6. print  $d;
    7. ?>
    o_O ?
     
  3. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    oO
    echo mt_rand(100, 999);

    Или
    implode(",", str_split(mt_rand(100, 999)));

    Или
    $number = (string)mt_rand(100, 999);
    echo $number[0],',',$number[1],',',$number[2];
     
  4. diez

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

    С нами с:
    23 сен 2007
    Сообщения:
    9
    Симпатии:
    0
    Спасибо...
    Где гарантия что числа из заданного промежутка будут уникальны(ОЧЕНЬ важно ), т.е все три числа разные!!!
     
  5. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  6. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    PHP:
    1.  
    2. <?php
    3. $a=rand(0,9);
    4. $b=rand(0,9);
    5. if($a==$b)
    6. {
    7.   while($a==$b)
    8.   {
    9.    $b=rand(0,9);
    10.    }
    11. }
    12. $c=rand(0,9);
    13. if(($c==$b) or ($c==$a))
    14. {
    15.   while (($c==$b) and ($c==$a))
    16.   {
    17.     $c=rand(0,9);
    18.   }
    19.  
    20. }
    21. $d=$a.$b.$c;
    22. print $d;
    23. ?>
    идеотизм конечно но должно работать
    зы: как or и and в условии делать точно не помню
     
  7. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Могу ошибаться, но мне кажется, что достаточно сид менять.

    А вариантов может быть выше крыши:
    PHP:
    1. <?php
    2. $numbers= array_fill(0, 9 , true);
    3. $rand_keys = array_rand($numbers, 3);
    4. echo implode(",", $rand_keys);
    5.  
    PHP:
    1.  
    2. $string = str_shuffle("0123456789");
    3. echo $string[0],',',$string[1],',',$string[2];
     
  8. diez

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

    С нами с:
    23 сен 2007
    Сообщения:
    9
    Симпатии:
    0
    Спасибо!!!
     
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Не, с сидами дело гиблое.
     
  10. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    PHP:
    1. <?php
    2. $a = range(0,9);
    3. shuffle($a);
    берем любые 3 элемента подряд.