ចំនួនគត់ចៃដន្យ php ។ បង្កើតលេខចៃដន្យ។ វាក្យសម្ពន្ធ

កិច្ចការ
អ្នកត្រូវបង្កើតលេខចៃដន្យក្នុងជួរលេខ។

ដំណោះស្រាយ
មុខងារ 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។ គុណវិបត្តិនៃវិធីសាស្ត្រនេះគឺវាមានច្រើន រយៈពេលពាក្យដដែលៗខ្លី ហៅថាវដ្ដ។ សម្រាប់ហេតុផលនេះ។ វិធីសាស្រ្តនេះ។មិនត្រូវបានប្រើនៅថ្ងៃនេះ។ វិធីសាស្រ្តទំនើបការបង្កើតលេខចៃដន្យគឺពិបាកជាង។

លេខចៃដន្យនៅក្នុង PHP

PHP មានពីរក្រុមនៃមុខងារសម្រាប់ធ្វើការជាមួយលេខចៃដន្យ។ ខាងក្រៅសុទ្ធសាធ ពួកវាអាចត្រូវបានសម្គាល់ដោយបុព្វបទ 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() ចាប់តាំងពីពេលនេះត្រូវបានធ្វើដោយស្វ័យប្រវត្តិ។