Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Generowanie losowych liczb
Forum PHP.pl > Forum > Przedszkole
klepacz_php
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?
hwao
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. ?>
kszychu
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.
UDAT
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 ) {
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.