klepacz_php
13.09.2006, 14:44:15
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
13.09.2006, 14:50:28
Robione na szybko
<?php
/**
* uniqRand
*
* Generuje tablic z losowa nie powtarzalna liczba elementow
*
* @param int $min minimalna wartosc
* @param int $max maksymalna wartosc
* @param int $count ile elementow
* @return array
*/
function uniqRand( $min, $max, $count ) {
while( count( $aItems ) < $count ) { $iRand = rand( $min, $max ); $aItems[] = $iRand;
}
}
return $aItems;
}
$aRand = uniqRand( 1, 10, 9 );
?>
kszychu
13.09.2006, 14:51:45
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
13.09.2006, 15:26:49
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.