Php यादृच्छिक संख्या 1 से 10 तक। PHP7.1 में नया क्या है: यादृच्छिक संख्या सृजन। जावास्क्रिप्ट में यादृच्छिक संख्याएँ

मुझसे पहले ही कई बार पूछा जा चुका है कि मैं अपनी वेबसाइट पर "स्मार्ट कोट्स" ब्लॉक में यादृच्छिक उद्धरण कैसे बनाता हूं। इसके बाद, मैं यह पता लगाने में कामयाब रहा कि यहां समस्या यह है कि लोग यह नहीं समझ पा रहे हैं कि PHP में किसी सरणी से यादृच्छिक तत्व को कैसे आउटपुट किया जाए। कार्य सरल है, लेकिन फिर भी, चूंकि प्रश्न उठते हैं, इसलिए उनका उत्तर दिया जाना चाहिए।

मैं आपको तुरंत कोड दे दूँगा। मान लीजिए कि उद्धरण चिह्नों के एक सेट के साथ एक सरणी है। और आपको उनमें से एक यादृच्छिक को चुनना होगा और आउटपुट देना होगा:

मुख्य बिंदु एक यादृच्छिक संख्या प्राप्त करना है। आपको बस सही सीमाएँ निर्धारित करनी हैं। यदि आपको सरणी की पूरी लंबाई पर एक यादृच्छिक तत्व का चयन करने की आवश्यकता है, तो यह 0 से (सरणी लंबाई शून्य से 1) तक है। और फिर परिणामी यादृच्छिक सूचकांक के साथ सरणी से एक तत्व को बस बाहर निकालें।

जहां तक ​​उद्धरण वाले कार्य का सवाल है, उन्हें डेटाबेस में संग्रहीत करना बेहतर है। सिद्धांत रूप में, यदि साइट बहुत सरल है, तो इसे टेक्स्ट फ़ाइल में किया जा सकता है। लेकिन यदि डेटाबेस में है, तो SQL क्वेरी में RAND() और LIMIT का उपयोग करना बेहतर है ताकि आपको तुरंत डेटाबेस से एकल और यादृच्छिक उद्धरण मिल सके।

एक यादृच्छिक संख्या उत्पन्न करने के लिए, आप PHP rand() या mt_rand() फ़ंक्शन का उपयोग कर सकते हैं। चर, फ़ाइलों के नामकरण, मुख्य जानकारी बनाने और सुरक्षा सुनिश्चित करने के लिए यादृच्छिक संख्याओं का उपयोग करने की आवश्यकता अक्सर अभ्यास में उत्पन्न होती है।

यादृच्छिकता और विशिष्टता

PHP रैंडम फ़ंक्शन दो वेरिएंट में आता है: rand() और mt_rand()। ऐसा माना जाता है कि पहले मामले में एल्गोरिदम सरल है और छद्म यादृच्छिक संख्याएं उत्पन्न करता है। दूसरे विकल्प में तेज़ एल्गोरिदम और प्रसिद्ध गणितीय विशेषताएं हैं। ज्यादातर मामलों में जब आपको एक यादृच्छिक संख्या प्राप्त करने की आवश्यकता होती है, तो आप PHP यादृच्छिक कॉल की एक श्रृंखला का उपयोग कर सकते हैं और संख्याओं का एक अद्वितीय संयोजन प्राप्त कर सकते हैं।

यदि आप 1 से 26 या 1 से 32 तक की संख्याओं को आधार के रूप में लेते हैं और उन्हें यादृच्छिक रूप से प्राप्त करते हैं, तो आप मुख्य जानकारी को लैटिन या सिरिलिक अक्षरों के अनुक्रम के रूप में बना सकते हैं। इस मामले में, PHP रैंडम वर्णमाला संबंधी जानकारी का अनुक्रम उत्पन्न करने का एक तरीका है, उदाहरण के लिए संचार चैनलों या एल्गोरिदम के परीक्षण के प्रयोजनों के लिए।

एक यादृच्छिक संख्या शायद ही कभी अद्वितीय होती है क्योंकि यह यादृच्छिक चर के वितरण कानून के अनुसार कई बार प्रकट हो सकती है। लेकिन यदि आप, विशेष रूप से, जावास्क्रिप्ट भाषा के स्थिर चर PHP और Math.random को जोड़ते हैं, तो आप एक वास्तविक अद्वितीय यादृच्छिक संख्या प्राप्त कर सकते हैं जिसे समय के साथ दोहराया नहीं जाएगा।

टाइम फ़ंक्शन का उपयोग करना

समय फ़ंक्शन, PHP और जावास्क्रिप्ट दोनों, आपको संख्याओं के अनूठे संयोजन बनाने की अनुमति देते हैं, शायद ही कभी जब एक समय में पर्याप्त बड़ी संख्या में घटनाएं घटित हो सकती हैं और यादृच्छिक चर दोहराया जाएगा।

संभावित मानों की एक बड़ी श्रृंखला पर सेकंड या मिलीसेकंड की सीमा में PHP को यादृच्छिक रूप से लागू करके, संख्याओं या अक्षरों के अद्वितीय यादृच्छिक संयोजन प्राप्त करना संभव है। और क्या?

समय फ़ंक्शन के मूल्य, क्रमिक रूप से बढ़ती संख्या और PHP यादृच्छिक को मिलाकर, आप क्लाइंट और सर्वर संचार चैनलों की विश्वसनीय सुरक्षा सुनिश्चित कर सकते हैं, चर के लिए अद्वितीय कोड बना सकते हैं, और एल्गोरिदम में अप्रत्याशित घटनाएं उत्पन्न कर सकते हैं।

PHP यादृच्छिक संख्या जनरेटर अधिकांश कार्यों के लिए एक उत्कृष्ट समाधान है, खासकर जब आपको न्यूनतम प्रयास के साथ जल्दी से उच्च गुणवत्ता वाले परिणाम प्राप्त करने की आवश्यकता होती है। संख्याओं या समय मानों की क्रमिक रूप से बढ़ती श्रृंखला के साथ रैंड() और mt_rand फ़ंक्शन का उपयोग करने से आप यादृच्छिक संख्याएं प्राप्त कर सकते हैं, दोनों मानों में दोहराई जाती हैं और अद्वितीय होती हैं।

यादृच्छिक संख्या जनरेटर को प्रारंभ करता है। वाक्य - विन्यास:

शून्य सरंड (पूर्णांक बीज)

बीज मान के साथ यादृच्छिक संख्या जनरेटर को प्रारंभ करता है।

स्रैंड((डबल) माइक्रोटाइम()*1000000);
$ यादृच्छिक = रैंड();
प्रतिध्वनि $ यादृच्छिक;

गेट्रैंडमैक्स

सबसे बड़ी संभावित यादृच्छिक संख्या लौटाता है. वाक्य - विन्यास:

इंट गेट्रैंडमैक्स()

यह फ़ंक्शन अधिकतम मान लौटाता है जिसे रैंड() यादृच्छिक संख्या पीढ़ी फ़ंक्शन का उपयोग करके प्राप्त किया जा सकता है।

आमतौर पर यह 32767 होता है

एक यादृच्छिक संख्या उत्पन्न करता है. वाक्य - विन्यास:

इंट रैंड()

जब वैकल्पिक न्यूनतम और अधिकतम मापदंडों के साथ कॉल किया जाता है, तो यह फ़ंक्शन उन मापदंडों तक और उनमें शामिल एक यादृच्छिक संख्या उत्पन्न करता है। यदि न्यूनतम और अधिकतम पैरामीटर गायब हैं, तो 0 से RAND_MAX तक की संख्या लौटा दी जाती है।

इस फ़ंक्शन के सही ढंग से काम करने के लिए, इसका उपयोग करने से पहले, आपको srand() फ़ंक्शन के साथ यादृच्छिक संख्या जनरेटर को प्रारंभ करना होगा।

एलसीजी_वैल्यू()

एलसीजी छद्म-यादृच्छिक संख्या जनरेटर (PHP 4, PHP 5)

विवरण:

फ़्लोट 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 गुना तेज है और मेर्सन ट्विस्टर का उपयोग करता है।

वैकल्पिक न्यूनतम और अधिकतम तर्कों के बिना कॉल किया गया, 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() के साथ आरंभ करना अब आवश्यक नहीं है, क्योंकि यह अब स्वचालित रूप से किया जाता है।

तकनीकी रूप से, "यादृच्छिक संख्या जनरेटर" शब्द बकवास है, क्योंकि संख्याएँ स्वयं यादृच्छिक नहीं हैं। उदाहरण के लिए, क्या 100 एक यादृच्छिक संख्या है? 25 के बारे में क्या? इस शब्द का वास्तव में मतलब यह है कि यह संख्याओं का एक क्रम बनाता है जो यादृच्छिक रूप से प्रकट होते हैं। इससे एक अधिक कठिन प्रश्न उठता है: यादृच्छिक संख्याओं का अनुक्रम क्या है? एकमात्र सही उत्तर: यादृच्छिक संख्याओं का अनुक्रम एक ऐसा क्रम है जिसमें सभी तत्व असंबंधित होते हैं। यह परिभाषा विरोधाभास की ओर ले जाती है कि कोई भी अनुक्रम या तो यादृच्छिक या गैर-यादृच्छिक हो सकता है, यह इस पर निर्भर करता है कि अनुक्रम कैसे प्राप्त किया जाता है। उदाहरण के लिए, संख्याओं की निम्नलिखित स्ट्रिंग
1 2 3 4 5 6 7 8 9 0
कीबोर्ड की शीर्ष पंक्ति को क्रम में टाइप करके प्राप्त किया गया था, इसलिए अनुक्रम को यादृच्छिक रूप से उत्पन्न नहीं माना जा सकता है। लेकिन क्या होगा अगर जब आप क्रमांकित टेनिस गेंदों को बैरल से बाहर निकालते हैं तो आपको वही क्रम मिलता है। इस मामले में, यह पहले से ही एक यादृच्छिक रूप से उत्पन्न अनुक्रम है। यह उदाहरण दर्शाता है कि किसी अनुक्रम की यादृच्छिकता इस पर निर्भर करती है कि इसे कैसे प्राप्त किया गया, न कि अनुक्रम पर।

याद रखें कि संख्याओं का कंप्यूटर-जनित अनुक्रम नियतात्मक होता है: पहली संख्या को छोड़कर प्रत्येक संख्या उससे पहले की संख्याओं पर निर्भर करती है। तकनीकी रूप से, इसका मतलब यह है कि कंप्यूटर द्वारा संख्याओं का केवल अर्ध-यादृच्छिक अनुक्रम ही उत्पन्न किया जा सकता है, अर्थात। वास्तव में वे वास्तव में यादृच्छिक नहीं हैं। हालाँकि, यह अधिकांश कार्यों के लिए पर्याप्त है और सरलता के लिए ऐसे अनुक्रमों को यादृच्छिक कहा जाएगा। एक बहुत ही दिलचस्प विधि जॉन वॉन न्यूमैन द्वारा विकसित की गई थी; इसे अक्सर मूल माध्य वर्ग कहा जाता है। इस पद्धति में, पिछली यादृच्छिक संख्या का वर्ग किया जाता है, और फिर परिणाम से मध्य अंक निकाले जाते हैं। उदाहरण के लिए, यदि आप तीन अंकों वाली संख्याएँ बना रहे हैं, और पिछली संख्या 121 थी, तो परिणाम का वर्ग करने पर परिणाम 14641 मिलता है। मध्य के तीन अंकों का वर्ग करने पर अगली यादृच्छिक संख्या 464 मिलती है। इस पद्धति का नुकसान यह है कि इसमें एक बहुत छोटी पुनरावृत्ति अवधि, जिसे चक्र कहा जाता है। इसी कारण से आज इस पद्धति का प्रयोग नहीं किया जाता है। यादृच्छिक संख्याएँ उत्पन्न करने की आधुनिक विधियाँ बहुत अधिक जटिल हैं।

PHP में यादृच्छिक संख्याएँ

यादृच्छिक संख्याओं के साथ काम करने के लिए PHP में फ़ंक्शन के दो समूह हैं। विशुद्ध रूप से बाह्य रूप से, उन्हें किसी एक समूह के सभी कार्यों के लिए mt_ उपसर्ग द्वारा अलग किया जा सकता है।

बहिष्कृत सुविधाएँ
रैंड फ़ंक्शन शून्य और RAND_MAX के मान (जो कि 32767 है) के बीच एक पूर्णांक लौटाता है। दो वैकल्पिक पूर्णांक पैरामीटर हो सकते हैं - यदि वे निर्दिष्ट हैं, तो पहले पैरामीटर से दूसरे तक एक यादृच्छिक संख्या उत्पन्न होती है।

इको रैंड(); इको रैंड(1,100); // 1 से 100 तक एक यादृच्छिक संख्या बताएं

समारोह सरंड. रैंड फ़ंक्शन द्वारा उत्पादित यादृच्छिक संख्याओं के अनुक्रम को निर्दिष्ट करता है। इसका एक संपूर्ण पैरामीटर है - इस पैरामीटर के विभिन्न मानों के लिए, रैंड संख्याओं के विभिन्न अनुक्रम उत्पन्न करेगा। रैंड फ़ंक्शन पर सभी कॉल से पहले स्रैंड फ़ंक्शन को केवल एक बार कॉल करने की आवश्यकता होती है। उपयोग उदाहरण:

स्रंड(1288); // यादृच्छिक संख्या जनरेटर को आरंभ करें ($i=0; $iquery(''उद्धरण से गिनती के रूप में चयन करें(*)');
यदि ($row = $sth->fetchRow()) (
$गिनती = $पंक्ति;
) अन्य (
मरो ($पंक्ति->getMessage());
}
$random = mt_rand(0, $गिनती - 1);
$sth = $dbh->क्वेरी ("उद्धरण सीमा से उद्धरण चुनें $random,1");
जबकि ($row = $sth->fetchRow()) (
$ पंक्ति प्रिंट करें।

"\एन";
}

यह कोड स्निपेट तालिका में पंक्तियों की कुल संख्या निर्धारित करता है, उस श्रेणी से एक यादृच्छिक संख्या उत्पन्न करता है, और फिर स्थिति $random से शुरू करके तालिका से एक पंक्ति का चयन करने के लिए LIMIT $random,1 का उपयोग करता है। MySQL संस्करण 3.23 या उच्चतर में, एक वैकल्पिक विकल्प संभव है:

$sth = $dbh->क्वेरी ("रैंड द्वारा ऑर्डर किए गए उद्धरणों में से उद्धरण चुनें() सीमा 1");
जबकि ($row = $sth->fetchRow()) (
$ पंक्ति प्रिंट करें। "\एन";
}

इस स्थिति में, MySQL पहले पंक्तियों को यादृच्छिक बनाता है और फिर पहली पंक्ति लौटाता है।