Generowanie losowych liczb w PHP bez powtórzeń (funkcja losująca).

Z Podręcznik Administratora by OPZ SGU
Wersja z dnia 03:52, 27 paź 2009 autorstwa Adminka23 (dyskusja | edycje) (Utworzył nową stronę „Dzisiaj kodując napotkałem na problem związany z generowaniem pseudo losowych liczb, bez powtórzeń. Oficjalnie PHP nie posiada w sobie takiego mechanizmu więc za…”)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania

Dzisiaj kodując napotkałem na problem związany z generowaniem pseudo losowych liczb, bez powtórzeń.

Oficjalnie PHP nie posiada w sobie takiego mechanizmu więc zacząłem poszukiwania na google.

Niestety żaden pierdolony buc jej nie udostępnił w postaci gotowej (prawdopodobnie uznał że korona mu z głowy spadnie) tak więc wymaganą funkcję musiałem utworzyć samemu.


Poniżej mój gotowiec, wykorzystujący rekurencję.

<source lang="php"> function wylosuj_liczby_bez_powtorzen($najmniejsza,$najwieksza,$ilosc,$wykluczone=,$i='0')

{
for ($petla=$i;$petla<$ilosc;$petla++)
{
$losowa=rand($najmniejsza,$najwieksza);
if ($wykluczone[$losowa]==$losowa)
{
return wylosuj_liczby_bez_powtorzen($najmniejsza,$najwieksza,$ilosc,$wykluczone,$petla);
}
else
{
$wykluczone[$losowa]=$losowa;
print(">>$losowa<<
"); } }

} </source>


Przykład użycia

<source lang="php"> wylosuj_liczby_bez_powtorzen(1,50,15); </source>

  • 1 - losuj liczby od jeden
  • 50 - do pięćdziesiąt
  • 15 - wylosowanych liczb ma być 15


Efekt finalny

>>45<<
>>38<<
>>6<<
>>23<<
>>16<<
>>35<<
>>9<<
>>29<<
>>15<<
>>4<<
>>11<<
>>21<<
>>50<<
>>48<<
>>8<<