Php tilfeldig tall fra 1 til 10. Hva er nytt i PHP7.1: generering av tilfeldige tall. Tilfeldige tall i JavaScript

Jeg har allerede blitt spurt et par ganger om hvordan jeg lager tilfeldige sitater på nettstedet mitt i "Smart Quotes"-blokken. Deretter klarte jeg å finne ut at problemet her er at folk ikke forstår hvordan de skal sende ut et tilfeldig element fra en matrise i PHP. Oppgaven er enkel, men siden spørsmål dukker opp, må de besvares.

Jeg gir deg koden med en gang. La oss si at det er en matrise med et sett med anførselstegn. Og du må velge en tilfeldig av dem og skrive ut:

Nøkkelen er å få et tilfeldig tall. Alt du trenger å gjøre er å sette de riktige grensene. Hvis du trenger å velge et tilfeldig element over hele lengden av matrisen, er det fra 0 til (matriselengde minus 1). Og så er det bare å trekke ut et element fra matrisen med den resulterende tilfeldige indeksen.

Når det gjelder oppgaven med sitater, er det bedre å lagre dem i en database. I prinsippet, hvis nettstedet er veldig enkelt, kan det gjøres i en tekstfil. Men hvis du er i en database, er det bedre å bruke RAND() og LIMIT i SQL-spørringen slik at du umiddelbart får et enkelt og tilfeldig sitat fra databasen.

For å generere et tilfeldig tall, kan du bruke funksjonen PHP rand() eller mt_rand(). Kravet om å bruke tilfeldige tall oppstår ofte i praksis for å navngi variabler, filer, lage nøkkelinformasjon og sikre sikkerhet.

Tilfeldighet og egenart

PHP tilfeldig funksjon kommer i to varianter: rand() og mt_rand(). Det antas at algoritmen i det første tilfellet er enklere og genererer pseudorandomtall. Det andre alternativet har en raskere algoritme og kjente matematiske egenskaper. I de fleste tilfeller når du trenger å få et tilfeldig nummer, kan du bruke en rekke PHP tilfeldige anrop og få en unik kombinasjon av tall.

Hvis du tar tall fra 1 til 26 eller fra 1 til 32 som grunnlag og får dem tilfeldig, kan du danne nøkkelinformasjon som en sekvens av latinske eller kyrilliske bokstaver. I dette tilfellet er PHP tilfeldig en måte å generere en sekvens av alfabetisk informasjon på, for eksempel med det formål å teste kommunikasjonskanaler eller algoritmer.

Et tilfeldig tall er sjelden unikt fordi det kan vises flere ganger i henhold til distribusjonsloven til en tilfeldig variabel. Men hvis du kombinerer spesielt den statiske variabelen PHP & Math.random i JavaScript-språket, kan du få et virkelig unikt tilfeldig tall som ikke vil gjentas over tid.

Bruke tidsfunksjonen

Tidsfunksjonen, både PHP og JavaScript, lar deg lage unike kombinasjoner av tall, sjelden når et tilstrekkelig stort antall hendelser kan oppstå på ett tidspunkt og den tilfeldige variabelen vil bli gjentatt.

Ved å bruke PHP tilfeldig i løpet av sekunder eller millisekunder over et stort utvalg av mulige verdier, er det mulig å oppnå unike tilfeldige kombinasjoner av tall eller bokstaver. Hva annet?

Ved å kombinere verdien av tidsfunksjonen, et sekvensielt økende antall og PHP tilfeldig, kan du sikre pålitelig sikkerhet for klient- og serverkommunikasjonskanaler, lage unike koder for variabler og generere uforutsigbare hendelser i algoritmer.

En PHP tilfeldig tallgenerator er en utmerket løsning for de fleste oppgaver, spesielt når du raskt trenger å få resultater av høy kvalitet med minimal innsats. Ved å bruke rand()- og mt_rand-funksjonene sammen med sekvensielt voksende tallserier eller tidsverdier kan du få tilfeldige tall, både gjentatte i verdier og unike.

Initialiserer tilfeldig tallgenerator. Syntaks:

Ugyldig srand (int frø)

Initialiserer tilfeldig tallgenerator med frøverdien.

Srand((dobbel) mikrotid()*1000000);
$random = rand();
ekko $tilfeldig;

GETRANDMAX

Returnerer størst mulig tilfeldig tall. Syntaks:

Int getrandmax()

Denne funksjonen returnerer den maksimale verdien som kan oppnås ved å bruke rand() tilfeldig tallgenereringsfunksjonen.

Vanligvis er det 32767

Genererer et tilfeldig tall. Syntaks:

Int rand()

Når den kalles opp med de valgfrie min og maks parameterne, genererer denne funksjonen et tilfeldig tall opp til og med disse parameterne. Hvis min og maks parametere mangler, returneres et tall fra 0 til RAND_MAX.

For at denne funksjonen skal fungere riktig, før du bruker den, må du initialisere tilfeldig tallgeneratoren med srand()-funksjonen.

lcg_value()

LCG pseudo-tilfeldig tallgenerator (PHP 4, PHP 5)

Beskrivelse:

Float lcg_value (void)

lcg_value() returnerer et pseudotilfeldig tall i området (0, 1). Funksjonen kombinerer to generatorer med 2^31 - 85 og 2^31 - 249 i en periode.

mt_getrandmax()

Viser størst mulig tilfeldig verdi (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Beskrivelse:

Int mt_getrandmax (ugyldig)

Viser den maksimale verdien som kan returneres av mt_rand()

mt_rand()

Genererer den beste tilfeldige verdien (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Beskrivelse:

int mt_rand()

Mange eldre versjoner av tilfeldige tallgeneratorer har tvilsomme egenskaper og er trege. Som standard bruker PHP funksjonen rand() for å generere tilfeldige tall. Funksjonen mt_rand() er en god erstatning. Den bruker en tilfeldig tallgenerator som er 4 ganger raskere enn rand() og bruker Mersenne Twister.

Kalt uten de valgfrie min- og maks-argumentene, returnerer mt_rand() en pseudo-tilfeldig verdi mellom 0 og RAND_MAX. Hvis du for eksempel trenger å få tilfeldige verdier mellom 5 og 15 inklusive, se etter mt_rand (5, 15).

Eksempel på bruk av mt_rand()

Resultatet av å kjøre dette eksemplet vil være noe sånt som dette:

1604716014
1478613278
6

Kommentar

Merk: I versjoner før 3.0.7 spesifiserte den andre parameteren for funksjonen tallområdet. For å få tilfeldige tall mellom 5 og 15 i disse versjonene, må du for eksempel spesifisere funksjonen mt_rand(5, 11).

mt_srand()

Angir startverdien til den beste tilfeldige tallgeneratoren (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Beskrivelse:

Void mt_srand()

Angir startverdien til tilfeldig tallgenerator ved bruk av frø. Fra og med PHP 4.2.0 er seed valgfritt og standardinnstillingene for tilfeldige verdier er utelatt.

Eksempel på bruk av mt_srand()

Merk: Fra og med PHP 4.2.0 er det ikke lenger nødvendig å initialisere tilfeldig tallgenerator med srand() eller mt_srand(), siden dette nå gjøres automatisk.

Teknisk sett er begrepet "tilfeldig tallgenerator" tull, siden tallene i seg selv ikke er tilfeldige. For eksempel, er 100 et tilfeldig tall? Hva med 25? Hva dette begrepet egentlig betyr er at det skaper en rekke tall som vises tilfeldig. Dette reiser et vanskeligere spørsmål: hva er en sekvens av tilfeldige tall? Det eneste riktige svaret: en sekvens av tilfeldige tall er en sekvens der alle elementene er urelaterte. Denne definisjonen fører til paradokset at enhver sekvens kan være enten tilfeldig eller ikke-tilfeldig, avhengig av hvordan sekvensen oppnås. For eksempel følgende rekke med tall
1 2 3 4 5 6 7 8 9 0
ble oppnådd ved å skrive den øverste linjen på tastaturet i rekkefølge, så sekvensen kan ikke anses som tilfeldig generert. Men hva om du får samme sekvens når du tar de nummererte tennisballene ut av tønnen. I dette tilfellet er det allerede en tilfeldig generert sekvens. Dette eksemplet viser at tilfeldigheten til en sekvens avhenger av hvordan den ble oppnådd, og ikke av selve sekvensen.

Husk at en datamaskingenerert tallsekvens er deterministisk: hvert tall unntatt det første avhenger av tallene foran det. Teknisk sett betyr dette at kun en kvasi-tilfeldig rekkefølge av tall kan genereres av en datamaskin, dvs. faktisk er de ikke helt tilfeldige. Dette er imidlertid tilstrekkelig for de fleste oppgaver, og for enkelhets skyld vil slike sekvenser bli kalt tilfeldige. En veldig interessant metode ble utviklet av John von Neumann; det kalles ofte rotmiddelkvadrat. I denne metoden kvadreres det forrige tilfeldige tallet, og deretter trekkes de midterste sifrene ut fra resultatet. For eksempel, hvis du lager tall med tre sifre, og det forrige tallet var 121, så gir oppkvadring av resultatet resultatet 14641. Kvadring av de tre midterste sifrene gir det neste tilfeldige tallet 464. Ulempen med denne metoden er at den har en svært kort repetisjonsperiode, kalt en syklus. Av denne grunn brukes ikke denne metoden i dag. Moderne metoder for å generere tilfeldige tall er mye mer komplekse.

Tilfeldige tall i PHP

PHP har to grupper funksjoner for å arbeide med tilfeldige tall. Rent eksternt kan de skilles ut med mt_-prefikset for alle funksjonene til en av gruppene.

Utdaterte funksjoner
rand funksjon Returnerer et heltall mellom null og verdien av RAND_MAX (som er 32767). Kan ha to valgfrie heltallsparametere - hvis de er spesifisert, genereres et tilfeldig tall fra den første parameteren til den andre.

Ekko rand(); ekko rand(1,100); // Gi ut et tilfeldig tall fra 1 til 100

Funksjon srand. Spesifiserer rekkefølgen av tilfeldige tall produsert av rand-funksjonen. Den har en hel parameter - for forskjellige verdier av denne parameteren vil rand produsere forskjellige tallsekvenser. Srand-funksjonen trenger bare å bli kalt én gang før alle kall til rand-funksjonen. Brukseksempel:

Srand(1288); // Initialiser tilfeldig tallgenerator for($i=0; $query("SELECT COUNT(*) AS count FROM quotes");
if ($row = $sth->fetchRow()) (
$count = $row;
) annet (
dø ($row->getMessage());
}
$random = mt_rand(0, $count - 1);
$sth = $dbh->query("SELECT quote FROM quotes LIMIT $random,1");
while ($row = $sth->fetchRow()) (
skriv ut $row .

"\n";
}

Denne kodebiten bestemmer det totale antallet rader i tabellen, genererer et tilfeldig tall fra det området, og bruker deretter LIMIT $random,1 for å VELG en rad fra tabellen som starter ved posisjon $random. I MySQL versjon 3.23 eller høyere er et alternativ mulig:

$sth = $dbh->query("VELG quote FROM quotes ORDER BY RAND() LIMIT 1");
while ($row = $sth->fetchRow()) (
skriv ut $row . "\n";
}

I dette tilfellet randomiserer MySQL først radene og returnerer deretter den første raden.