អ្នកត្រូវបង្កើតលេខចៃដន្យក្នុងជួរលេខ។
ដំណោះស្រាយ
មុខងារ 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 ។ IN កំណែ MySQL 3.23 ឬខ្ពស់ជាងនេះ ជម្រើសជំនួសគឺអាចធ្វើទៅបាន៖
$sth = $dbh->query("SELECT quotes from quotes ORDER BY RAND() LIMIT 1");
while ($row = $sth->fetchRow()) (
បោះពុម្ព $ ជួរ។ "\n";
}
ក្នុងករណីនេះ MySQL ដំបូងដាក់ជួរដេកចូល លំដាប់ចៃដន្យហើយបន្ទាប់មកត្រឡប់ជួរទីមួយ។
តាមបច្ចេកទេស ពាក្យថា "ម៉ាស៊ីនបង្កើតលេខចៃដន្យ" គឺមិនសមហេតុសមផលទេ ព្រោះលេខខ្លួនឯងមិនមែនជាចៃដន្យទេ។ ឧទាហរណ៍ 100 ជាលេខចៃដន្យ? ចុះ ២៥ វិញ? អ្វីដែលពាក្យនេះពិតជាមានន័យថាវាបង្កើតលំដាប់លេខដែលលេចឡើងដោយចៃដន្យ។ នេះជាសំណួរដែលពិបាកជាងនេះទៅទៀត៖ តើអ្វីជាលេខចៃដន្យ? ចម្លើយត្រឹមត្រូវតែមួយគត់៖ លំដាប់នៃលេខចៃដន្យគឺជាលំដាប់ដែលធាតុទាំងអស់មិនទាក់ទងគ្នា។ និយមន័យនេះនាំទៅរកភាពផ្ទុយគ្នា ដែលលំដាប់ណាមួយអាចជាចៃដន្យ ឬមិនចៃដន្យ អាស្រ័យលើរបៀបដែលលំដាប់ត្រូវបានទទួល។ ឧ. បន្ទាត់បន្ទាប់លេខ
1 2 3 4 5 6 7 8 9 0
ត្រូវបានទទួលដោយការបោះពុម្ព បន្ទាត់កំពូលក្តារចុចតាមលំដាប់លំដោយ ដូច្នេះលំដាប់មិនអាចត្រូវបានចាត់ទុកថាបង្កើតដោយចៃដន្យទេ។ ប៉ុន្តែចុះយ៉ាងណាបើអ្នកទទួលបានលំដាប់ដូចគ្នានៅពេលអ្នកយកបាល់វាយកូនបាល់ដែលមានលេខចេញពីធុង។ IN ក្នុងករណីនេះនេះគឺជាលំដាប់ដែលបានបង្កើតដោយចៃដន្យរួចហើយ។ ឧទាហរណ៍នេះបង្ហាញថា ចៃដន្យនៃលំដាប់មួយអាស្រ័យទៅលើរបៀបដែលវាត្រូវបានទទួល និងមិនមែននៅលើលំដាប់ផ្ទាល់នោះទេ។
សូមចាំថា លំដាប់លេខដែលបង្កើតដោយកុំព្យូទ័រគឺកំណត់៖ លេខនីមួយៗ លើកលែងតែលេខទីមួយអាស្រ័យលើលេខមុនវា។ តាមបច្ចេកទេស នេះមានន័យថា មានតែលំដាប់ចៃដន្យនៃលេខប៉ុណ្ណោះដែលអាចបង្កើតបានដោយកុំព្យូទ័រ ពោលគឺឧ។ តាមពិតពួកគេមិនមែនជាចៃដន្យទេ។ ទោះជាយ៉ាងណាក៏ដោយនេះគឺគ្រប់គ្រាន់សម្រាប់កិច្ចការភាគច្រើន ហើយសម្រាប់ភាពសាមញ្ញ លំដាប់បែបនេះនឹងត្រូវបានគេហៅថាចៃដន្យ។ វិធីសាស្រ្តដ៏គួរឱ្យចាប់អារម្មណ៍មួយត្រូវបានបង្កើតឡើងដោយ John von Neumann; វាត្រូវបានគេហៅថាជា root មធ្យមការ៉េ។ នៅក្នុងវិធីនេះ លេខចៃដន្យមុនត្រូវបានកាត់ជាការ៉េ ហើយបន្ទាប់មកខ្ទង់កណ្តាលត្រូវបានស្រង់ចេញពីលទ្ធផល។ ឧទាហរណ៍ ប្រសិនបើអ្នកកំពុងបង្កើតលេខដែលមានលេខបីខ្ទង់ ហើយលេខមុនគឺ 121 បន្ទាប់មកការបំបែកវាផ្តល់លទ្ធផល 14641។ ការញែកលេខកណ្តាលបីខ្ទង់ផ្តល់លេខចៃដន្យបន្ទាប់ 464។ គុណវិបត្តិនៃវិធីសាស្ត្រនេះគឺវាមានច្រើន រយៈពេលពាក្យដដែលៗខ្លី ហៅថាវដ្ដ។ សម្រាប់ហេតុផលនេះ។ វិធីសាស្រ្តនេះ។មិនត្រូវបានប្រើនៅថ្ងៃនេះ។ វិធីសាស្រ្តទំនើបការបង្កើតលេខចៃដន្យគឺពិបាកជាង។
លេខចៃដន្យនៅក្នុង PHPPHP មានពីរក្រុមនៃមុខងារសម្រាប់ធ្វើការជាមួយលេខចៃដន្យ។ ខាងក្រៅសុទ្ធសាធ ពួកវាអាចត្រូវបានសម្គាល់ដោយបុព្វបទ mt_ សម្រាប់មុខងារទាំងអស់នៃក្រុមណាមួយ។
មុខងារដែលបានបដិសេធ
មុខងារ Rand ត្រឡប់ចំនួនគត់រវាងសូន្យ និងតម្លៃនៃ RAND_MAX (ដែលជា 32767)។ អាចមានប៉ារ៉ាម៉ែត្រចំនួនគត់ស្រេចចិត្តពីរ - ប្រសិនបើពួកគេត្រូវបានបញ្ជាក់ ចំនួនចៃដន្យត្រូវបានបង្កើតពីប៉ារ៉ាម៉ែត្រទីមួយទៅទីពីរ។
Echo Rand(); អេកូ Rand (1,100); // ផ្តល់លេខចៃដន្យពី 1 ដល់ 100
មុខងារ srand ។ បញ្ជាក់លំដាប់លេខចៃដន្យដែលផលិតដោយអនុគមន៍ rand ។ មានប៉ារ៉ាម៉ែត្រទាំងមូល - ពេលណា អត្ថន័យផ្សេងគ្នាជាមួយនឹងប៉ារ៉ាម៉ែត្រនេះ Rand នឹងបង្កើតលេខរៀងផ្សេងៗគ្នា។ អនុគមន៍ srand ត្រូវការហៅតែម្តងប៉ុណ្ណោះ មុនពេលការហៅទាំងអស់ទៅកាន់អនុគមន៍ rand ។ ឧទាហរណ៍នៃការប្រើប្រាស់៖
សេន (1288); // ចាប់ផ្តើមបង្កើតលេខចៃដន្យសម្រាប់ ($i=0; $i=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()
លទ្ធផលនៃការអនុវត្ត ឧទាហរណ៍នេះ។វានឹងមានអ្វីមួយដូចនេះ៖
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()
ចំណាំ៖ គិតត្រឹម PHP 4.2.0 វាលែងចាំបាច់ក្នុងការចាប់ផ្តើមម៉ាស៊ីនបង្កើតលេខចៃដន្យជាមួយ srand() ឬ mt_srand() ចាប់តាំងពីពេលនេះត្រូវបានធ្វើដោយស្វ័យប្រវត្តិ។