Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

PHP में मॉड्युलो ऑपरेटर का उपयोग कैसे करें

by
Difficulty:BeginnerLength:MediumLanguages:

Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)

PHP में कुल आठ अर्थमैटिक ऑपरेटर्स है। सबसे कॉमन है जमा करना (+), घटाना (-), गुणा करना (*), और भाग करना (/)। थोड़ी कम जानकारी वाला, लेकिन फिर भी काफी महत्वपूर्ण ऑपरेटर है मॉड्युलो (%)। इस ट्यूटोरियल में, हम मॉड्युलो ऑपरेटर पर ध्यान केंद्रित करेंगे। हम इस पर चर्चा करेंगे कि यह क्या करता है और इसके कुछ प्रैक्टिकल उपयोग क्या है।

मॉड्युलो ऑपरेटर क्या करता है?

यदि आपके पास दो वेरिएबल $a और $b हैं, तो $a % $b को कैलकुलेट करते हुए - आमतौर पर “a modulo b” या “a mod b” का उच्चारण किया जाता है - जो आपको $b द्वारा $a को भाग करने के बाद शेषफल देता है। मॉड्युलो एक इन्टिजर ऑपरेटर है, इसलिए यह शेष संख्या की कैलकुलेशन करने से पहले दोनों ऑपरेंड को इन्टिजर में परिवर्तित करता है। तो बेसिकली मॉड्युलो इन्टिजर को भाग करता है और शेष डिविडेंड से जो कुछ भी बचा है उसे वापस देता है।

मॉड्युलो ऑपरेटर द्वारा रिटर्न की गई वैल्यू का साइन डिविडेंड के साइन से निर्धारित होता है। भाग करने में, दो नेगेटिव नंबर्स को डिवाइड करने के बाद परिणाम एक पॉजिटिव नंबर होगा। हालांकि, मॉड्युलो ऑपरेटर के साथ ऐसा नहीं है। डिवीज़र के साइन का अंतिम वैल्यू पर कोई प्रभाव नहीं होता।

यहां कुछ उदाहरण दिए गए हैं:

फ्लोटिंग-प्वाइंट मॉड्युलो

यदि आप शेषफल को कैलकुलेट करना चाहते हैं जब दो फ्लोटिंग-प्वाइंट नंबर एक दूसरे से भाग होते हैं, तो आपको fmod($divident, $divisor) फंक्शन का उपयोग करना होगा। यह फ्लोटिंग प्वाइंट को भाग होने के बाद शेष रहता है। शेषफल की वैल्यू में लाभांश के समान ही साइन होगा, और इसका मेग्नीट्यूड भाजक से कम होगा। तीन नंबर आपस में निम्न प्रकार से संबंधित होंगे:

यहां, i की वैल्यू एक इन्टिजर होगी।

आपको याद रखना चाहिए कि फ्लोटिंग-प्वाइंट अर्थमैटिक बायनरी या डेसिमल अंशो के फंक्शन की सीमाओं के कारण हमेशा सटीक नहीं होते हैं। उदाहरण के लिए, 1/3 को डेसिमल रुप से सही ढंग से प्रस्तुत नहीं किया जा सकता है। आप 0.33333…. लिख सकते हैं लेकिन किसी ना किसी बिंदु पर आप को रुकना होगा। आप दशमलव रिप्रेजेंटेशन में प्रत्येक अतिरिक्त 3 के साथ ओरिजिनल वैल्यू के करीब पहुंच जाएंगे, लेकिन वैल्यू अभी भी 1/3 नहीं होगी।

इस तरह की अशुद्धि से fmod() फंक्शन के साथ समस्याएं होती हैं: परिणाम पूरी तरह से विश्वसनीय नहीं होते।

यहां fmod() फंक्शन के कुछ उदाहरण दिए गए हैं:

दूसरी वैल्यू सटीक नहीं है क्योंकि 0.2 पूरी तरह से 18.8 में विभाजित है। यह कंप्यूटर द्वारा उपयोग किए जाने वाले फ्लोटिंग-प्वाइंट फॉर्मेट में कैलकुलेशन की कमी है।

मॉड्युलो ऑपरेटर का उपयोग

इस ट्यूटोरियल में, हम खुद को इन्टिजर मॉड्युलो तक सीमित रखेंगे क्योंकि यह बहुत अधिक सामान्य है और इसमें बहुत सारे एप्लीकेशंस हैं।

यह जांच करना कि क्या संख्या किसी अन्य संख्या कि एक मल्टीपल है

मॉड्युलो ऑपरेटर का परिणाम जीरो है यदि पहली संख्या दूसरी संख्या से पूरी तरह से विभाज्य है। यह जांचने के लिए इस्तेमाल किया जा सकता है कि किसी दिए गए नंबर के पेअर में एक नंबर एक से अधिक है या नहीं। संभवतः मॉड्युलो ऑपरेटर की इस प्रॉपर्टी का सबसे आम उपयोग यह जांचने में है कि क्या कोई संख्या सम या विषम है। यहां एक उदाहरण है:

ऊपर दिए गए उदाहरण में, आप एक यूजर से रंगों की सूची प्राप्त कर सकते हैं और उनसे पूछ सकते हैं कि वह सिर्फ रंगो की सम संख्या को प्राप्त करें।

नीचे दिए गए उदाहरण में 5 स्टूडेंट्स के साथ ग्रुप बनाने के लिए उसी समान रीजनिंग का उपयोग किया गया है। वास्तविक जीवन में, आपको स्टूडेंट्स को ग्रुप करने के लिए अतिरिक्त कोड का उपयोग करना होगा, लेकिन यह चेक करने का एक बेसिक आईडिया है यदि कुल छात्रों की संख्या 5 का मल्टीपल है और इसके गुणको में परिवर्तन नहीं होता है।

नंबर को किसी दूसरे नंबर का मल्टीपल होने के लिए बदलना

ऊपर वाले सेक्शन में, हमने यूजर को सूचित करने के लिए मॉड्युलो आप मल्टीपल में इनपुट वैल्यू प्रदान करने के लिए किया है। यदि यह संभव नहीं है, तो हम इनपुट को और साथ ही 5 या कुछ अन्य संख्याओं के मल्टीपल के लिए भी बाध्य कर सकते हैं।

मॉड्युलो ऑपरेटर दूसरे नंबर द्वारा पहली संख्या को विभाजित करने के बाद बचे हुए पूरे नंबर को प्रदान करता है। इसका मतलब यह है कि पहले संख्या से शेष को - दूसरी संख्या का मल्टीपल बना देगा। उदाहरण के लिए, 28 को 5 का मल्टीपल बनाया जा सकता है 28 % 5 मॉड्युलो को लेकर। अब हम 3 को ओरिजिनल नंबर से घटा देंगे ताकि यह 5 का मल्टीपल बन जाए। नीचे दी गई लाइन किसी भी पॉजिटिव नंबर x को एक उचित वैल्यू उसमे से घटा कर किसी अन्य पॉजिटिव नंबर y के मल्टीपल करेगी।

28 स्टूडेंट्स के साथ हमारे पिछले उदाहरण में, हम केवल 3 स्टूडेंट्स को छोड़ सकते हैं और अन्य स्टूडेंट्स को एक साथ ग्रुप बना सकते हैं।

इनपुट पर एक लिमिट रखें

जैसा कि मैंने पोस्ट की शुरुआत में उल्लेख किया है, पॉजिटिव नंबर के मामले में, मॉड्युलो ऑपरेटर 0 और N - 1 के बीच एक नंबर रिटर्न करेगा, जहां N एक विभाजक है। इसका मतलब है कि आप किसी भी इनपुट पर कैप लगा सकते हैं और कुछ ऑपरेशन रिपीट कर करके और सिक्वेंस के साथ कर सकते हैं। यहां एक उदाहरण है:

ऊपर दिए गए उदाहरण में, हमारे पास सिर्फ पांच रंग है लेकिन कुल 180 इमेजेस है। इसका मतलब है कि हमें उन्ही पांच रंगों के माध्यम से लूपिंग करते रहना होगा और उन्हें सभी इमेजेस पर असाइन करना होगा। मॉड्युलो ऑपरेटर की आवश्यकता को पूरी तरह से फिट करता है। यह 0 और (5-1) या 4 इंक्लूसिव के बीच $i % $color_count की वैल्यू को डिस्ट्रिक्ट करेगा। दूसरे शब्दों में, हम अपने ऐरे के सभी रंगों को सीक्वेंस के साथ आसानी से चुन पाएंगे।

लूप के अंदर हर nth टाइम में कुछ टास्क करो

जब एक रूप को ट्रावर्स (traverse) किया जाता है, तो हम लोग के माध्यम से प्रत्येक पास के साथ इंक्रीमेंट हुए वेरिएबल की वैल्यू को चेक कर सकते हैं और प्रत्यय nth इटरेशन के बाद एक खास काम कर सकते हैं। एक व्यवहारिक उपयोग का मामला जो दिमाग में आता है वह यूजर को एक लंबा चलने वाले प्रोसेस के बारे में अपडेट करना है। मान लीजिए कि आप PHP का उपयोग करके 1,000 अलग-अलग इमेजेस में परिवर्तन कर रहे हैं। यदि यह परिवर्तन महत्वपूर्ण है, तो यह प्रोसेस सभी इमेजेस को अपडेट करने में थोड़ा सा मिलेगा।

ऐसे मामलों में, यूजर्स के लिए यह जानने का कोई तरीका नहीं होगा कि क्या प्रोग्राम सिर्फ अटक गया है या वास्तव में कोई प्रोग्रेस कर रहा है। आप प्रत्येक 10th इमेज को एडिट करने के बाद यूजर्स को प्रोग्रेस की रिपोर्ट कर सकते हैं।

ऊपर दिए गए उदाहरण में update_images() फंक्शन पूरी तरह से बना हुआ है, लेकिन आप इसे अन्य प्रोसेस के साथ बदल सकते हैं जैसे कि इमेजेस का आकार बदलना, वाटर मार्क जोड़ना, उन्हें ग्रेस्केल में बदलना आदि। (यदि आप सीखना चाहते हैं की अपने आप PHP में प्रोग्रामेटिकली इमेज को एडिट कैसे करें तो मेरे PHP GD इमेज एडिटिंग ट्यूटोरियल को देखें)।

अलग-अलग यूनिट ऑफ मेजरमेंट में कन्वर्ट करना

मेजरमेंट की विभिन्न यूनिट्स के बीच कन्वर्ट करने के लिए मॉड्युलो ऑपरेटर का भी उपयोग किया जा सकता है। उदाहरण के लिए, आप सेकेंड्स में दिए गए समय को उसी अवधि में घंटों में परिवर्तन करने के लिए इसका उपयोग कर सकते हैं। इसी तरह, आप सेंटीमीटर्स के बड़े नंबर को किलोमीटर्स, मीटर्स, और सैंटीमीटर्स में भी बदल सकते हैं। यहां एक उदाहरण है:

हम केवल 3,600 से सेकंड की कुल संख्या हो भाग कर के और वॉल्यूम को एक इन्टिजर में कास्ट करके शुरू करते हैं। इसमें हमें कोई घंटे मिलते हैं क्योंकि हर घंटे में 3,600 सेकंड होते हैं।

अगले स्टेप में, हम सेकंड की मूल संख्या से 3600 * $hours को घटा दो हैं। यह उन सभी सेकेंड्स से छुटकारा दिलाता है जिन्हें हमने घंटों में बदल दिया है। अब 60 से भाग देने पर हमें कुल मिनट मिलेंगे। अंत में, हम सेकंड की संख्या प्राप्त करने के लिए मॉड्युलो ऑपरेटर का उपयोग करते हैं।

अंतिम विचार

जैसे कि आपने इस ट्यूटोरियल में देखा, मॉड्युलो ऑपरेटर, हालांकि उपयोग करने में आसान है, इसमें बहुत सारे एप्लीकेशन भी है। हमने इस ट्यूटोरियल को पॉजिटिव और नेगेटिव दोनों वैल्यू के मॉड्युलो के साथ साथ फ्लोट्स को भी देखा। उसके बाद, हमने कुछ सामान्य सिनेरियो को कवर किया, जहां हम मॉड्युलो का उपयोग करेंगे।

यदि आपके पास इस ट्यूटोरियल से संबंधित कोई प्रश्न है, तो कृपया मुझे कमेंट में बताएं। क्या आपके मन में मॉड्युलो के कोई और उपयोग भी है? कृपया उन्हें नीचे पोस्ट करके साथी रीडर्स के साथ सांझा करें।

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.