Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Generowanie losowych liczb, Jak wygenerować kilka losowych liczb?
klepacz_php
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 13.09.2006

Ostrzeżenie: (0%)
-----


Chcę wygenerować np. 10 losowych liczb z przedziału 1-1000. Funkcja rand() generuje jedną liczbę - mogę ją wrzucić w pętlę, ale będę musiał sprawdzać, czy nie wygenerowałem tych samych liczb.
Jest jakaś funkcja do generowania kliku liczb z zadanego zakresu?

Ten post edytował klepacz_php 13.09.2006, 14:44:38
Go to the top of the page
+Quote Post
hwao
post
Post #2


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Robione na szybko
  1. <?php
  2.  
  3. /**
  4.  * uniqRand
  5.  * 
  6.  * Generuje tablic z losowa nie powtarzalna liczba elementow
  7.  *
  8.  * @param int $min  minimalna wartosc
  9.  * @param int $max  maksymalna wartosc
  10.  * @param int $count ile elementow
  11.  * @return array
  12.  */
  13. function uniqRand( $min, $max, $count ) {
  14. $aItems = array();
  15. while( count( $aItems ) < $count ) {
  16. $iRand = rand( $min, $max );
  17. if( !in_array( $iRand, $aItems ) ) {
  18. $aItems[] = $iRand;
  19. }
  20. }
  21. return $aItems;
  22. }
  23.  
  24. $aRand = uniqRand( 1, 10, 9 );
  25. print_r( $aRand );
  26.  
  27. ?>
Go to the top of the page
+Quote Post
kszychu
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

Ostrzeżenie: (0%)
-----


Generujesz pojedyncze liczby i wrzucasz je do tablicy, sprawdzając, czy już ich w niej nie ma (in_array()).
Jest drugi sposób, ale dla praedziału 1-1000 mało optymalny: generujesz tablicę z liczbami od 1 do 1000 (nie pamiętam teraz funkcji, więc sobie poszukaj), przetasowujesz ją (shuffle()) i pobierasz pierwszych 10 elementów.
Go to the top of the page
+Quote Post
UDAT
post
Post #4





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

Ostrzeżenie: (0%)
-----


Kiedyś w Cormenie, czy jakiejś innej książeczce, było coś takiego:

[php]
function uniqRand ( $min, $max, $count ) {
$retArray = array ( );

for ( $i=0; $i<$count; ++$i ) {
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 22:30