Php պատահական թիվ 1-ից մինչև 10: Ինչ նորություն կա PHP7.1-ում. պատահական թվերի ստեղծում: Պատահական թվեր JavaScript-ում
Ինձ արդեն մի քանի անգամ հարցրել են, թե ինչպես եմ պատահական մեջբերումներ անում իմ կայքում «Խելացի գնանշումներ» բլոկում: Հաջորդը, ինձ հաջողվեց պարզել, որ այստեղ խնդիրն այն է, որ մարդիկ չեն հասկանում, թե ինչպես կարելի է PHP-ում զանգվածից պատահական տարր դուրս բերել: Խնդիրը պարզ է, բայց, այնուամենայնիվ, քանի որ հարցեր են ծագում, դրանց պետք է պատասխանել։
Ես ձեզ անմիջապես կտամ կոդը: Ենթադրենք, կա մի զանգված՝ չակերտների հավաքածուով։ Եվ դուք պետք է ընտրեք դրանցից մեկը պատահական և թողարկեք.
Հիմնական կետը պատահական թիվ ստանալն է: Մնում է միայն ճիշտ սահմաններ դնել: Եթե Ձեզ անհրաժեշտ է զանգվածի ողջ երկարությամբ պատահական տարր ընտրել, ապա այն 0-ից մինչև (զանգվածի երկարությունը հանած 1): Եվ հետո պարզապես զանգվածից մի տարր հանեք՝ ստացված պատահական ինդեքսով:
Ինչ վերաբերում է չակերտներով առաջադրանքին, ապա ավելի լավ է դրանք պահել տվյալների բազայում։ Սկզբունքորեն, եթե կայքը շատ պարզ է, ապա այն կարելի է անել տեքստային ֆայլում։ Բայց եթե տվյալների բազայում, ապա ավելի լավ է SQL հարցումում օգտագործել RAND() և LIMIT, որպեսզի անմիջապես ստանաք մեկ և պատահական մեջբերում տվյալների բազայից։
Պատահական թիվ ստեղծելու համար կարող եք օգտագործել PHP rand() կամ mt_rand() ֆունկցիաները: Պատահական թվեր օգտագործելու պահանջը հաճախ առաջանում է պրակտիկայում՝ փոփոխականներ, ֆայլեր անվանելու, հիմնական տեղեկատվություն ստեղծելու և անվտանգությունն ապահովելու համար:
Պատահականություն և եզակիությունPHP պատահական ֆունկցիան գալիս է երկու տարբերակով՝ rand() և mt_rand(): Ենթադրվում է, որ առաջին դեպքում ալգորիթմն ավելի պարզ է և առաջացնում է կեղծ պատահական թվեր։ Երկրորդ տարբերակն ունի ավելի արագ ալգորիթմ և հայտնի մաթեմատիկական բնութագրեր։ Շատ դեպքերում, երբ անհրաժեշտ է պատահական համար ստանալ, կարող եք օգտագործել PHP պատահական զանգերի շարք և ստանալ թվերի եզակի համադրություն:
Եթե հիմք ընդունեք 1-ից 26-ը կամ 1-ից մինչև 32 թվերը և ստացեք դրանք պատահականության սկզբունքով, կարող եք հիմնական տեղեկատվությունը ձևավորել որպես լատիներեն կամ կիրիլիցա տառերի հաջորդականություն: Այս դեպքում PHP պատահականությունը այբբենական տեղեկատվության հաջորդականություն ստեղծելու միջոց է, օրինակ՝ կապի ուղիների կամ ալգորիթմների փորձարկման նպատակով:
Պատահական թիվը հազվադեպ է եզակի, քանի որ այն կարող է հայտնվել մի քանի անգամ՝ ըստ պատահական փոփոխականի բաշխման օրենքի: Բայց եթե համատեղեք, մասնավորապես, JavaScript լեզվի ստատիկ փոփոխականը PHP & Math.random, կարող եք ստանալ իրական եզակի պատահական թիվ, որը ժամանակի ընթացքում չի կրկնվի։
Օգտագործելով ժամանակի գործառույթըԺամանակի ֆունկցիան՝ և՛ PHP, և՛ JavaScript, թույլ է տալիս ձևավորել թվերի եզակի համակցություններ, հազվադեպ, երբ բավական մեծ թվով իրադարձություններ կարող են տեղի ունենալ ժամանակի մեկ կետում, և պատահական փոփոխականը կկրկնվի:
Կիրառելով PHP պատահականությունը վայրկյանների կամ միլիվայրկյանների միջակայքում հնարավոր արժեքների մեծ տիրույթում, հնարավոր է ստանալ թվերի կամ տառերի եզակի պատահական համակցություններ: Էլ ինչ?
Համատեղելով ժամանակի ֆունկցիայի արժեքը, հաջորդաբար աճող թիվը և PHP պատահականությունը, դուք կարող եք ապահովել հաճախորդի և սերվերի հաղորդակցման ուղիների հուսալի անվտանգությունը, ստեղծել փոփոխականների եզակի կոդեր և առաջացնել անկանխատեսելի իրադարձություններ ալգորիթմներում:
PHP պատահական թվերի գեներատորը գերազանց լուծում է առաջադրանքների մեծ մասի համար, հատկապես, երբ ձեզ անհրաժեշտ է արագորեն բարձրորակ արդյունքներ ստանալ նվազագույն ջանքերով: Օգտագործելով rand() և mt_rand ֆունկցիաները հաջորդաբար աճող թվերի շարքերի կամ ժամանակային արժեքների հետ համատեղ, թույլ է տալիս ստանալ պատահական թվեր՝ և՛ կրկնվող արժեքներով, և՛ եզակի:
Նախաձեռնում է պատահական թվերի գեներատորը: Շարահյուսություն:
Void srand (int seed)
Նախաձեռնում է պատահական թվերի գեներատորը սերմի արժեքով:
Srand ((կրկնակի) microtime () * 1000000);
$պատահական = rand();
echo $ պատահական;
ԳԵՏՐԱՆԴՄԱՔՍ
Վերադարձնում է ամենամեծ հնարավոր պատահական թիվը: Շարահյուսություն:
Int getrandmax ()
Այս ֆունկցիան վերադարձնում է առավելագույն արժեքը, որը կարելի է ստանալ՝ օգտագործելով rand() պատահական թվերի ստեղծման ֆունկցիան։
Սովորաբար դա 32767 է
Պատահական թիվ է առաջացնում: Շարահյուսություն:
Int rand ()
Երբ կանչվում է ընտրովի min և max պարամետրերով, այս ֆունկցիան առաջացնում է պատահական թվեր մինչև այդ պարամետրերը ներառելով: Եթե min և max պարամետրերը բացակայում են, վերադարձվում է 0-ից մինչև RAND_MAX տատանվող թիվ:
Որպեսզի այս ֆունկցիան ճիշտ աշխատի, նախքան այն օգտագործելը, անհրաժեշտ է նախաստորագրել պատահական թվերի գեներատորը srand() ֆունկցիայով։
lcg_value()
LCG կեղծ պատահական թվերի գեներատոր (PHP 4, PHP 5)
Նկարագրություն:
Float lcg_value (անվավեր)
lcg_value()-ը վերադարձնում է կեղծ պատահական թիվ (0, 1): Ֆունկցիան միավորում է երկու գեներատորներ 2^31 - 85 և 2^31 - 249 ժամանակահատվածում:
mt_getrandmax()
Ցույց է տալիս ամենամեծ հնարավոր պատահական արժեքը (PHP 3 >= 3.0.6, PHP 4, PHP 5)
Նկարագրություն:
Int mt_getrandmax (անվավեր)
Ցույց է տալիս առավելագույն արժեքը, որը կարող է վերադարձվել mt_rand()-ի կողմից
mt_rand ()
Առաջացնում է լավագույն պատահական արժեքը (PHP 3 >= 3.0.6, PHP 4, PHP 5)
Նկարագրություն:
int mt_rand ()
Պատահական թվերի գեներատորների շատ ավելի հին տարբերակներ ունեն կասկածելի բնութագրեր և դանդաղ են: Լռելյայնորեն, PHP-ն օգտագործում է rand() ֆունկցիան՝ պատահական թվեր ստեղծելու համար։ Mt_rand() ֆունկցիան լավ փոխարինում է: Այն օգտագործում է պատահական թվերի գեներատոր, որը 4 անգամ ավելի արագ է, քան rand()-ը և օգտագործում է Mersenne Twister-ը։
Զանգված առանց ընտրովի min և max արգումենտների, mt_rand() վերադարձնում է կեղծ պատահական արժեք, որը տատանվում է 0-ից RAND_MAX-ի միջև: Եթե Ձեզ անհրաժեշտ է ստանալ, օրինակ, պատահական արժեքներ 5-ի և 15-ի միջև ներառյալ, փնտրեք mt_rand (5, 15):
mt_rand() օգտագործման օրինակ
Այս օրինակը գործարկելու արդյունքը կլինի այսպիսին.
1604716014
1478613278
6
Մեկնաբանություն
Նշում. 3.0.7-ին նախորդող տարբերակներում ֆունկցիայի երկրորդ պարամետրը նշում էր թվերի տիրույթը: Օրինակ, այս տարբերակներում 5-ից 15-ի միջև պատահական թվեր ստանալու համար անհրաժեշտ է նշել mt_rand(5, 11) ֆունկցիան:
mt_srand ()
Սահմանում է պատահական թվերի լավագույն գեներատորի սկզբնական արժեքը (PHP 3 >= 3.0.6, PHP 4, PHP 5)
Նկարագրություն:
Void mt_srand()
Սահմանում է պատահական թվերի գեներատորի սկզբնական արժեքը՝ օգտագործելով seed-ը: PHP 4.2.0-ի դրությամբ սերմը կամընտիր է, և պատահական արժեքների լռելյայն կարգավորումները բաց են թողնվել:
mt_srand() օգտագործման օրինակ
Նշում. PHP 4.2.0-ի դրությամբ այլևս անհրաժեշտ չէ պատահական թվերի գեներատորը սկզբնավորել srand()-ով կամ mt_srand(-ով), քանի որ դա այժմ կատարվում է ավտոմատ կերպով:
Տեխնիկապես «պատահական թվերի գեներատոր» տերմինը անհեթեթություն է, քանի որ թվերն իրենք պատահական չեն: Օրինակ՝ 100-ը պատահական թիվ է։ Ինչ վերաբերում է 25-ին: Այս տերմինը իրականում նշանակում է, որ այն ստեղծում է պատահական թվերի հաջորդականություն: Սա ավելի բարդ հարց է առաջացնում՝ ի՞նչ է պատահական թվերի հաջորդականությունը: Միակ ճիշտ պատասխանը. պատահական թվերի հաջորդականությունը այն հաջորդականությունն է, որում բոլոր տարրերը կապ չունեն: Այս սահմանումը հանգեցնում է պարադոքսի, որ ցանկացած հաջորդականություն կարող է լինել կամ պատահական կամ ոչ պատահական, կախված նրանից, թե ինչպես է ստացվում հաջորդականությունը: Օրինակ՝ թվերի հետևյալ տողը
1 2 3 4 5 6 7 8 9 0
ստացվել է ստեղնաշարի վերին գիծը հերթականությամբ մուտքագրելով, ուստի հաջորդականությունը չի կարող պատահականորեն առաջացած համարվել: Բայց ի՞նչ, եթե տակառից թենիսի համարակալված գնդակները հանելիս նույն հաջորդականությունը ստանաք: Այս դեպքում դա արդեն պատահականորեն առաջացած հաջորդականություն է։ Այս օրինակը ցույց է տալիս, որ հաջորդականության պատահականությունը կախված է նրանից, թե ինչպես է այն ստացվել, և ոչ թե բուն հաջորդականությունից:
Հիշեք, որ համակարգչի կողմից ստեղծված թվերի հաջորդականությունը դետերմինիստական է. յուրաքանչյուր թիվ, բացի առաջինից, կախված է իրենից առաջ եղած թվերից: Տեխնիկապես դա նշանակում է, որ համակարգչի կողմից կարող է ստեղծվել միայն թվերի գրեթե պատահական հաջորդականություն, այսինքն. իրականում դրանք իսկապես պատահական չեն: Այնուամենայնիվ, սա բավարար է առաջադրանքների մեծ մասի համար և պարզության համար նման հաջորդականությունները կկոչվեն պատահական: Մի շատ հետաքրքիր մեթոդ մշակվել է Ջոն ֆոն Նեյմանի կողմից. այն հաճախ կոչվում է արմատի միջին քառակուսի: Այս մեթոդով նախորդ պատահական թիվը քառակուսի է դրվում, այնուհետև արդյունքից հանվում են միջին թվանշանները: Օրինակ, եթե դուք ստեղծում եք երեք թվանշաններով թվեր, իսկ նախորդ թիվը 121 էր, ապա արդյունքի քառակուսումը տալիս է 14641 արդյունք: Միջին երեք նիշերը քառակուսացնելուց ստացվում է հաջորդ պատահական թիվը՝ 464: Այս մեթոդի թերությունն այն է, որ այն ունի շատ կարճ կրկնության շրջան, որը կոչվում է ցիկլ: Այդ իսկ պատճառով այսօր այս մեթոդը չի կիրառվում։ Պատահական թվերի ստեղծման ժամանակակից մեթոդները շատ ավելի բարդ են:
Պատահական թվեր PHP-ումPHP-ն ունի երկու խումբ ֆունկցիաներ՝ պատահական թվերի հետ աշխատելու համար։ Զուտ արտաքինից դրանք կարելի է տարբերել mt_ նախածանցով խմբերից մեկի բոլոր ֆունկցիաների համար։
Հնացած հատկանիշներ
ռանդի ֆունկցիան Վերադարձնում է ամբողջ թիվ զրոյի և RAND_MAX արժեքի միջև (որը 32767 է): Կարող է ունենալ երկու կամընտիր ամբողջ թվային պարամետր. եթե դրանք նշված են, պատահական թիվ է ստեղծվում առաջին պարամետրից երկրորդը:
Echo rand (); էխո ռանդ (1100); // Տվեք պատահական թիվ 1-ից մինչև 100
Ֆունկցիան srand. Նշում է պատահական թվերի հաջորդականությունը, որոնք արտադրվում են ռանդի ֆունկցիայի կողմից: Այն ունի մի ամբողջ պարամետր. այս պարամետրի տարբեր արժեքների համար rand-ը կստեղծի թվերի տարբեր հաջորդականություններ: Srand ֆունկցիան պետք է կանչել միայն մեկ անգամ՝ rand ֆունկցիայի բոլոր կանչերից առաջ: Օգտագործման օրինակ.
Սրանդ (1288); // Նախաձեռնել պատահական թվերի գեներատորը for($i=0; $iquery("SELECT COUNT(*) AS count FROM quotes");
եթե ($ տող = $sth->fetchRow()) (
$count = $ տող;
) ուրիշ (
die ($row->getMessage());
}
$պատահական = mt_rand(0, $count - 1);
$sth = $dbh-> հարցում ("SELECT quote FROM quotes LIMIT $պատահական,1");
մինչդեռ ($ տող = $sth->fetchRow()) (
տպել $ տող .
«\n»;
}
Կոդի այս հատվածը որոշում է աղյուսակի տողերի ընդհանուր թիվը, այդ միջակայքից ստեղծում է պատահական թիվ, այնուհետև օգտագործում է LIMIT $պատահական,1՝ աղյուսակից մեկ տող ընտրելու համար՝ սկսած $պատահական դիրքից: MySQL 3.23 կամ ավելի բարձր տարբերակում հնարավոր է այլընտրանքային տարբերակ.
$sth = $dbh-> հարցում ("SELECT quote FROM quotes ORDER BY RAND() LIMIT 1");
մինչդեռ ($ տող = $sth->fetchRow()) (
տպել $ տող . «\n»;
}
Այս դեպքում MySQL-ը նախ պատահականացնում է տողերը, իսկ հետո վերադարձնում է առաջին տողը։