សួស្តីអ្នកទាំងអស់គ្នា! នៅក្នុងអត្ថបទនេះយើងនឹងពិនិត្យមើល, តើមានអ្វីថ្មីសម្រាប់ការបង្កើតលេខចៃដន្យនៅក្នុង PHP 7.1.
ការអាប់ដេតនេះបានកើតឡើងចំពោះអ្នកអភិវឌ្ឍន៍ដែលមើលមិនឃើញ ប៉ុន្តែបានកែលម្អភាសាសរសេរកម្មវិធី PHPនៅក្នុងវិស័យនៃការបង្កើតលេខចៃដន្យ។
តាមដែលគេដឹងគឺក្នុង PHPយើងអាចប្រើមុខងារ Rand (អប្បបរមា, អតិបរមា)ដើម្បីបង្កើតលេខចៃដន្យ៖
Echo Rand (7, 17);
ប្រសិនបើអ្នកឥឡូវនេះធ្វើឱ្យទំព័រឡើងវិញ អ្នកនឹងទទួលបានលេខចៃដន្យថ្មីរាល់ពេល។
ប៉ុន្តែមិនមែនអ្វីគ្រប់យ៉ាងគឺសាមញ្ញដូចដែលវាហាក់ដូចជា។ ចំណុចនោះគឺថាអាស្រ័យលើអ្វីដែលអ្នកកំពុងបង្កើតលេខចៃដន្យសម្រាប់មុខងារ រ៉ែន ()ប្រើប្រព័ន្ធជំនាន់ផ្សេងៗគ្នា។ ទាំងនោះ។ វាអាស្រ័យលើប្រព័ន្ធដែលវាត្រូវបានប្រើ។ ប្រព័ន្ធមួយចំនួនអាចប្រើវិធីសាស្ត្របង្កើតខ្សោយ ដូច្នេះអ្នកនឹងទទួលបានលេខដែលមិនចៃដន្យទាំងស្រុង។
IN PHP 7.1បញ្ហានេះត្រូវបានជួសជុល ហើយមុខងារមួយត្រូវបានបន្ថែម mt_rand():
អេកូ mt_rand(7, 17);
មុខងារនេះដំណើរការបានប្រសើរជាងមុន រួមទាំងសុវត្ថិភាពផងដែរ។ អ្វីដែលសំខាន់ផងដែរដើម្បីដឹងគឺថាប្រសិនបើអ្នកប្រើមុខងារ រ៉ែន ()វ PHP 7.1បន្ទាប់មកវានឹងត្រូវបានសរសេរជាន់លើដោយស្វ័យប្រវត្តិ mt_rand(). ទាំងនោះ។ រ៉ែន ()ឥឡូវនេះគ្រាន់តែជាឈ្មោះហៅក្រៅសម្រាប់ mt_rand().
មុខងារផ្សេងទៀតជាច្រើនសម្រាប់បង្កើតលទ្ធផលចៃដន្យត្រូវបានកែលម្អនៅក្នុង PHP 7.1. ជាឧទាហរណ៍ សូមក្រឡេកមើលពីរបៀបដែលយើងអាចទទួលបានតម្លៃចៃដន្យពីអារេមួយ៖
$names = ["Ivan", "Alexander", "Vasiliy"];
បន្ទរ $names;
ទាំងនោះ។ មុខងារបែបនេះត្រូវបានកែលម្អដើម្បីបង្កើតលេខចៃដន្យកាន់តែប្រសើរឡើង PHP 7.1. បាទ ការអាប់ដេតនេះមិនមានការកត់សម្គាល់ទេ ប៉ុន្តែទោះបីជាអ្នកសរសេរជាភាសាអ្វីក៏ដោយ វាជាការសំខាន់ណាស់ដែលត្រូវយល់ពីអ្វីដែលកំពុងកើតឡើងនៅក្នុងមុខងារ និងរបៀបដែលវាមានឥរិយាបទ។
កិច្ចការអ្នកត្រូវបង្កើតលេខចៃដន្យក្នុងជួរលេខ។
ដំណោះស្រាយ
មុខងារ mt_rand() ត្រូវបានរចនាឡើងសម្រាប់នេះ៖
// ចំនួនចៃដន្យរវាង $ ខាងលើ និង $ ទាបជាង រួមបញ្ចូល
$random_number = mt_rand($ទាបជាង, $upper);
ការពិភាក្សា
ការបង្កើតលេខចៃដន្យមានប្រយោជន៍នៅពេលដែលអ្នកត្រូវការបង្ហាញរូបភាពចៃដន្យនៅលើអេក្រង់ កំណត់ដោយចៃដន្យនូវចំណុចចាប់ផ្តើមនៅក្នុងហ្គេម ជ្រើសរើសធាតុចៃដន្យពីមូលដ្ឋានទិន្នន័យ ឬបង្កើតការកំណត់អត្តសញ្ញាណសម័យពិសេសមួយ។ ដើម្បីបង្កើតលេខចៃដន្យក្នុងចន្លោះពេលរវាងចំណុចពីរ អ្នកត្រូវឆ្លងកាត់អាគុយម៉ង់ពីរទៅអនុគមន៍ mt_rand()៖
$random_number = mt_rand(1, 100);
ការហៅទូរសព្ទទៅ mt_rand() ដោយគ្មានអាគុយម៉ង់ ត្រឡប់លេខរវាងសូន្យ និងចំនួនចៃដន្យអតិបរមា ត្រឡប់ដោយ mt_getrandmax()។ វាពិបាកសម្រាប់កុំព្យូទ័រដើម្បីបង្កើតលេខចៃដន្យពិតប្រាកដ។ គាត់មានភាពល្អប្រសើរជាងក្នុងការធ្វើតាមការណែនាំជាវិធីសាស្ត្រ ហើយមិនសូវល្អទេ ប្រសិនបើគាត់ត្រូវបានតម្រូវឱ្យធ្វើសកម្មភាពដោយឯកឯង។ ប្រសិនបើអ្នកត្រូវការបង្ខំកុំព្យូទ័រឱ្យផលិតលេខចៃដន្យ នោះអ្នកត្រូវផ្តល់ឱ្យវានូវសំណុំជាក់លាក់នៃពាក្យបញ្ជាដែលអាចធ្វើម្តងទៀតបាន ហើយការពិតនៃការធ្វើម្តងទៀតធ្វើឱ្យការសម្រេចបាននូវចៃដន្យទំនងជាតិចជាង។
PHP មានម៉ាស៊ីនបង្កើតលេខចៃដន្យពីរផ្សេងគ្នា៖ មុខងារបុរាណហៅថា rand() និងមុខងារកម្រិតខ្ពស់ជាង mt_rand()។
MT (Mersenne Twister) គឺជាម៉ាស៊ីនបង្កើតលេខចៃដន្យ ដែលដាក់ឈ្មោះតាមព្រះសង្ឃបារាំង និងគណិតវិទូ Marin Mersenne ដែលបានសិក្សាលេខបឋម។ ក្បួនដោះស្រាយនៃម៉ាស៊ីនភ្លើងនេះគឺផ្អែកលើលេខបឋមទាំងនេះ។ អនុគមន៍ mt_rand() លឿនជាងអនុគមន៍ rand() ហើយបង្កើតលេខចៃដន្យកាន់តែច្រើន ដូច្នេះយើងចូលចិត្តអតីត។
ប្រសិនបើអ្នកមានកំណែ PHP លឿនជាង 4.2 បន្ទាប់មកមុនពេលហៅមុខងារ mt_rand() (ឬ rand()) ជាលើកដំបូង អ្នកត្រូវចាប់ផ្តើមម៉ាស៊ីនភ្លើងជាមួយនឹងតម្លៃដំបូងដោយហៅ mt_srand() (ឬ srand( )) មុខងារ។ គ្រាប់ពូជគឺជាលេខដែលអនុគមន៍ចៃដន្យប្រើជាមូលដ្ឋានសម្រាប់បង្កើតលេខចៃដន្យដែលវាត្រឡប់។ វាសំដៅទៅលើវិធីមួយដើម្បីដោះស្រាយបញ្ហាលំបាកដែលបានរៀបរាប់ខាងលើ - ការកើតឡើងដដែលៗធៀបនឹងភាពចៃដន្យ។
ជាតម្លៃដំបូងដែលផ្លាស់ប្តូរយ៉ាងរហ័ស និងមានប្រូបាប៊ីលីតេទាបនៃការធ្វើឡើងវិញបាន (លក្ខណៈសម្បត្តិទាំងនេះគួរតែកំណត់លក្ខណៈនៃតម្លៃដំបូងដ៏ល្អ) អ្នកអាចយកតម្លៃដែលត្រឡប់ដោយអនុគមន៍ពេលវេលាដែលមានភាពជាក់លាក់ខ្ពស់ microtime()។ វាគ្រប់គ្រាន់ក្នុងការចាប់ផ្តើមម៉ាស៊ីនភ្លើងម្តង។ PHP 4.2 និងក្រោយមកគ្រប់គ្រងការចាប់ផ្ដើមដោយស្វ័យប្រវត្តិ ប៉ុន្តែប្រសិនបើតម្លៃដំបូងត្រូវបានកំណត់ដោយដៃមុនពេលការហៅលើកដំបូងទៅកាន់ mt_rand() PHP មិនជំនួសវាដោយតម្លៃដំបូងរបស់វានោះទេ។
ប្រសិនបើអ្នកត្រូវការជ្រើសរើសកំណត់ត្រាចៃដន្យពីមូលដ្ឋានទិន្នន័យ វិធីងាយស្រួលបំផុតគឺកំណត់ចំនួនវាលសរុបក្នុងតារាងជាមុនសិន ជ្រើសរើសលេខចៃដន្យពីជួរនោះ ហើយបន្ទាប់មកសួរជួរនោះពីមូលដ្ឋានទិន្នន័យ៖
$sth = $dbh->query("SELECT COUNT(*) AS count FROM quotes");
ប្រសិនបើ ($row = $sth->fetchRow()) (
$count = $row;
) ផ្សេងទៀត (
ស្លាប់ ($row->getMessage());
}
$random = mt_rand(0, $count - 1);
$sth = $dbh->query("SELECT quotes FROM quotes LIMIT $random,1");
while ($row = $sth->fetchRow()) (
បោះពុម្ព $ ជួរ។
"\n";
}
បណ្តុំកូដនេះកំណត់ចំនួនជួរដេកសរុបក្នុងតារាង បង្កើតចំនួនចៃដន្យពីជួរនោះ ហើយបន្ទាប់មកប្រើ LIMIT $random,1 ដើម្បីជ្រើសរើសជួរដេកមួយពីតារាងដោយចាប់ផ្តើមពីទីតាំង $random ។ នៅក្នុង MySQL កំណែ 3.23 ឬខ្ពស់ជាងនេះ ជម្រើសជំនួសគឺអាចធ្វើទៅបាន៖
$sth = $dbh->query("ជ្រើសរើសសម្រង់ពីសម្រង់ ORDER BY RAND() LIMIT 1");
while ($row = $sth->fetchRow()) (
បោះពុម្ព $ ជួរ។ "\n";
}
ក្នុងករណីនេះ MySQL ដំបូងចៃដន្យជួរដេក ហើយបន្ទាប់មកត្រឡប់ជួរទីមួយវិញ។
ចាប់ផ្តើមម៉ាស៊ីនបង្កើតលេខចៃដន្យ។ វាក្យសម្ពន្ធ៖
គ្រាប់ពូជ int (គ្រាប់ពូជ)
ចាប់ផ្តើមម៉ាស៊ីនបង្កើតលេខចៃដន្យជាមួយនឹងតម្លៃគ្រាប់ពូជ។
Srand ((ពីរដង) មីក្រូម៉ោង () * 1000000);
$random = rand();
អេកូ $ ចៃដន្យ;
GETRANDMAX
ត្រឡប់លេខចៃដន្យធំបំផុតដែលអាចធ្វើបាន។ វាក្យសម្ពន្ធ៖
int getrandmax()
មុខងារនេះត្រឡប់តម្លៃអតិបរមាដែលអាចទទួលបានដោយប្រើមុខងារបង្កើតលេខចៃដន្យ rand()។
ជាធម្មតាវាគឺ 32767
បង្កើតលេខចៃដន្យ។ វាក្យសម្ពន្ធ៖
Int Rand()
នៅពេលហៅដោយប្រើជម្រើសអប្បបរមា និងប៉ារ៉ាម៉ែត្រអតិបរមា មុខងារនេះបង្កើតចំនួនចៃដន្យរហូតដល់ និងរួមបញ្ចូលប៉ារ៉ាម៉ែត្រទាំងនោះ។ ប្រសិនបើប៉ារ៉ាម៉ែត្រអប្បបរមា និងអតិបរមាត្រូវបានបាត់ លេខចាប់ពី 0 ដល់ RAND_MAX ត្រូវបានប្រគល់មកវិញ។
ដើម្បីឱ្យមុខងារនេះដំណើរការបានត្រឹមត្រូវ មុនពេលប្រើវា អ្នកត្រូវចាប់ផ្តើមបង្កើតលេខចៃដន្យជាមួយមុខងារ srand()។
lcg_value()
ម៉ាស៊ីនបង្កើតលេខចៃដន្យ LCG (PHP 4, PHP 5)
ការពិពណ៌នា៖
អណ្តែត lcg_value (ទុកជាមោឃៈ)
lcg_value() ត្រឡប់លេខ pseudorandom ក្នុងជួរ (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() គឺជាការជំនួសដ៏ល្អ។ វាប្រើម៉ាស៊ីនបង្កើតលេខចៃដន្យដែលលឿនជាង rand () 4 ដង ហើយប្រើ Mersenne Twister ។
បានហៅដោយគ្មានអំណះអំណាងអប្បបរមា និងអតិបរមាជាជម្រើស mt_rand() ត្រឡប់តម្លៃចៃដន្យចន្លោះពី 0 និង RAND_MAX ។ ប្រសិនបើអ្នកត្រូវការដើម្បីទទួលបានឧទាហរណ៍តម្លៃចៃដន្យរវាង 5 និង 15 រួមបញ្ចូល រកមើល mt_rand (5, 15) ។
ឧទាហរណ៍នៃការប្រើប្រាស់ mt_rand()
បន្ទរ mt_rand() ។ "\n";
បន្ទរ mt_rand() ។ "\n";
អេកូ mt_rand(5, 15);
?>
លទ្ធផលនៃការដំណើរការឧទាហរណ៍នេះនឹងមានអ្វីមួយដូចនេះ៖
1604716014
1478613278
6
មតិយោបល់
មតិយោបល់៖ នៅក្នុងកំណែមុន 3.0.7 ប៉ារ៉ាម៉ែត្រទីពីរនៃអនុគមន៍បានបញ្ជាក់ជួរនៃលេខ។ ឧទាហរណ៍ ដើម្បីទទួលបានលេខចៃដន្យចន្លោះពី 5 ទៅ 15 នៅក្នុងកំណែទាំងនេះ អ្នកត្រូវបញ្ជាក់មុខងារ mt_rand(5, 11)។
mt_srand()
កំណត់តម្លៃដំបូងនៃម៉ាស៊ីនបង្កើតលេខចៃដន្យល្អបំផុត (PHP 3 >= 3.0.6, PHP 4, PHP 5)
ការពិពណ៌នា៖
មោឃៈ mt_srand()
កំណត់តម្លៃដំបូងនៃម៉ាស៊ីនបង្កើតលេខចៃដន្យដោយប្រើគ្រាប់ពូជ។ គិតត្រឹម PHP 4.2.0 គ្រាប់ពូជគឺស្រេចចិត្ត ហើយការកំណត់លំនាំដើមសម្រាប់តម្លៃចៃដន្យត្រូវបានលុបចោល។
ឧទាហរណ៍នៃការប្រើប្រាស់ mt_srand()
// គ្រាប់ពូជជាមួយមីក្រូវិនាទី
មុខងារ make_seed()
{
list($usec, $sec) = explode(" ", microtime());
ត្រឡប់ (អណ្តែត) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());
$randval = mt_rand();
?>
មតិយោបល់៖ គិតត្រឹម PHP 4.2.0 វាលែងចាំបាច់ក្នុងការចាប់ផ្តើមម៉ាស៊ីនបង្កើតលេខចៃដន្យជាមួយ srand() ឬ mt_srand() ចាប់តាំងពីពេលនេះត្រូវបានធ្វើដោយស្វ័យប្រវត្តិ។
ឥឡូវនេះ យើងយកមុខងារបង្កើតពាក្យសម្ងាត់ដែលត្រៀមរួចជាស្រេច ហើយសរសេរស្គ្រីបដើម្បីសង្គ្រោះ ឬបង្កើតពាក្យសម្ងាត់ថ្មីសម្រាប់អ្នកប្រើប្រាស់គេហទំព័ររបស់អ្នក។
ស្គ្រីបសង្គ្រោះពាក្យសម្ងាត់
តើស្គ្រីបជាធម្មតាត្រូវបានសរសេរយ៉ាងដូចម្តេច?
ដូចរាល់ដង គ្រោងការណ៍មួយជំហានម្តងៗត្រូវបានគូរឡើង អ្វីដែលយើងត្រូវធ្វើមួយជំហានម្តងៗ។ អ្វីគ្រប់យ៉ាងកើតឡើងនៅក្នុងឯកសារមួយ, reminder.php
1. យើងដំណើរការស្គ្រីបលុះត្រាតែមានអថេរជាក់លាក់មួយ ឧទាហរណ៍ $action;
2. ដើម្បីចាប់ផ្តើមដំណើរការបង្កើតពាក្យសម្ងាត់ អ្នកប្រើប្រាស់បញ្ជាក់អាសយដ្ឋានអ៊ីមែល $_POST[`ema'l`]; ដើម្បីសម្រួលកូដ សូមកំណត់តម្លៃនេះទៅអថេរ $email។
3. ដោយប្រើកន្សោមធម្មតា យើងពិនិត្យមើលតួអក្សរទាំងអស់ដើម្បីធានាថាអ្នកប្រើប្រាស់បានបញ្ចូលអាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវ។ បើមិនដូច្នោះទេ យើងបង្ហាញកំហុស និងបញ្ឈប់ស្គ្រីប។ ប្រសិនបើអ្វីៗទាំងអស់ត្រឹមត្រូវ យើងបន្តទៅមុខទៀត។
4. យើងរកមើលនៅក្នុងមូលដ្ឋានទិន្នន័យ ក្នុងករណីរបស់យើងនៅក្នុងតារាងអ្នកប្រើប្រាស់ សម្រាប់អ្នកប្រើប្រាស់ដែលមានអាសយដ្ឋានអ៊ីមែលនេះ។ ប្រសិនបើមិនមានទេ យើងចេញកំហុសដែលមិនមានអាសយដ្ឋានបែបនេះនៅក្នុងមូលដ្ឋានទិន្នន័យ ហើយបញ្ឈប់ស្គ្រីប។
5. មានអ្នកប្រើប្រាស់ដែលមានអាសយដ្ឋាននេះនៅក្នុងមូលដ្ឋានទិន្នន័យ សូមបន្តដំណើរការមុខងារបង្កើតពាក្យសម្ងាត់ថ្មី។ ដូចគ្នានេះផងដែរ ដោយប្រើអាសយដ្ឋានអ៊ីមែល យើងទទួលបានលេខសម្គាល់តែមួយគត់របស់អ្នកប្រើពីមូលដ្ឋានទិន្នន័យ ហើយសរសេរវាទៅអថេរ $id;