Generowanie losowych liczb w PHP bez powtórzeń (funkcja losująca).: Różnice pomiędzy wersjami

Z Podręcznik Administratora by OPZ SGU
Przejdź do nawigacji Przejdź do wyszukiwania
m (Zastępowanie tekstu - "<source lang="php">" na "<pre>")
m (Zastępowanie tekstu - "</source>" na "</pre>")
 
Linia 25: Linia 25:
  }
  }
}
}
</source>
</pre>




Linia 32: Linia 32:
<pre>
<pre>
wylosuj_liczby_bez_powtorzen(1,50,15);
wylosuj_liczby_bez_powtorzen(1,50,15);
</source>
</pre>
*1 - losuj liczby od jeden
*1 - losuj liczby od jeden
*50 - do pięćdziesiąt
*50 - do pięćdziesiąt

Aktualna wersja na dzień 17:23, 15 lut 2018

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 hasłem "jak wylosować liczby bez powtórzeń w php".

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ę.

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<<<br>");
 }
 }
}


Przykład użycia

wylosuj_liczby_bez_powtorzen(1,50,15);
  • 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<<