Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. PHP
Code

PHP में ऐरे को कैसे सॉर्ट करें

by
Difficulty:BeginnerLength:LongLanguages:

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

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

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

ऐरे को वैल्यू द्वारा सॉर्ट करना

PHP में एलिमेंट्स की वैल्यू से एक ऐरे को सॉर्ट करना बहुत आसान है। आप key-value एसोसिएशन को बनाए रखने या छोड़ देने में से कुछ भी चुन सकते हैं, और आप अपने फंक्शंस को यह निर्धारित करने के लिए भी डिफाइन कर सकते हैं कि एलिमेंट्स को कैसे सॉर्ट किया जाए। ट्यूटोरियल के इस भाग में मैं आपको दिखाता हूं कि हम यह कैसे कर सकते हैं।

आप ऐरे की वैल्यू को छोटे से बड़े में सॉर्ट करने के लिए sort(&$array, $sort_flags) फंक्शन का प्रयोग कर सकते हैं। हालांकि, यह ऐरे को सॉर्ट करते समय किसी भी key-value एसोसिएशन को मेंटेन नहीं रखेगा। नई keys को एक साधारण रीऑर्डर के बजाय सॉर्ट एलिमेंट्स को असाइन किया गया है। दूसरा वैकल्पिक पैरामीटर आपको यह निर्दिष्ट करने की अनुमति देता है कि एलिमेंट्स को कैसे सॉर्ट किया जाना चाहिए। इसकी छह अलग-अलग वैल्यूज हो सकती हैं:

  1. SORT_REGULAR — यह उनके टाइप्स को बदले बिना वैल्यूज को सॉर्ट करेगा।
  2. SORT_NUMERIC — यह न्यूमैरिक रूप से तुलना करके वैल्यूज को सॉर्ट करेगा।
  3. SORT_STRING — यह values को स्ट्रिंग्स के रूप में तुलना करके सॉर्ट करेगा।
  4. SORT_LOCALE_STRING — यह करंट लोकेल (current locale) के आधार पर वैल्यूज की तुलना स्ट्रिंग्स के रूप में करेगा। आप अपने आप ही setlocale() का उपयोग करके लोकेल को अपडेट कर सकते हैं।
  5. SORT_NATURAL — यह स्ट्रिंग्स के रूप में तुलना करते हुए “natural ordering” का उपयोग करके आइटम्स को सॉर्ट करेगा।
  6. SORT_FLAG_CASE — यह स्ट्रिंग को सॉर्ट करते समय केस-सेंसिटिविटी को बंद करने के लिए SORT_STRING या SORT_NATURAL के साथ जोड़ा जा सकता है।

यहां सभी तरह के फ्लैग्स के बीच अंतर को जल्दी से समझने में आपकी मदद करने के लिए कुछ सॉर्टिंग उदाहरण है।

पहले उदाहरण में, जिसमें रेगुलर सॉर्टिंग के बारे में बताया है, न्यूमेरिकल स्ट्रिंग को उनकी न्यूमेरिकल वैल्यू में कन्वर्ट किया जाता है, और उसी के अनुसार सॉर्टिंग की जाती है। “Apple” स्ट्रिंग नॉन-न्यूमैरिक है, इसलिए इसे बिना छुए छोड़ दिया जाता है और स्ट्रिंग के रूप में कंपेयर किया जाता है।

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

तीसरे उदाहरण में, सभी वैल्यूज को स्ट्रिंग माना जाता है। इसका अर्थ है कि न्यूमेरिकल वैल्यू 123 या 3249832 को 38 के साथ कंपेयर करने के बजाय, ये स्ट्रिंग्स के रूप में कंपेयर किए जाते हैं - एक बार में एक अक्षर। क्योंकि “1” “3” से पहले आता है, इसलिए 123 की वैल्यू को 38 से छोटा माना जाता है।

यदि आप अपने ऐरे की वैल्यू को बड़े से छोटे की बजाए छोटे से बड़े में सॉर्ट करना चाहते हैं, तो आप rsort() फंक्शन की मदद से ऐसा कर सकते हैं। यह sort() के समान ही पैरामीटर्स को लेता है लेकिन वैल्यू को उल्टे ऑर्डर में सॉर्ट करता है। यह भी कोई key-value एसोसिएशन को मेंटेन नहीं करता, इसलिए यह एसोसिएटिव ऐरे को सॉर्ट करने के लिए एक अच्छा चुनाव नहीं होगा।

एक अस्सोसिएटिव ऐरे को सॉर्ट करना

जब आप अस्सोसिएटिव ऐरे के साथ काम कर रहे होते हैं तब key-value एसोसिएशन बहुत महत्वपूर्ण हो जाता है। नीचे दिए गए उदाहरण पर विचार करें, जहां अस्सोसिएटिव ऐरे का प्रयोग अलग अलग व्यक्तियों के नाम और उनके पसंदीदा फल को स्टोर करने के लिए किया जाता है। यदि आप लिस्ट को फलों के नाम के अक्षरों के अनुसार सॉर्ट करना चाहते हैं, पिछले सेक्शन से sort() फंक्शन का प्रयोग आपके रिजल्ट में से एसोसिएटेड keys को हटा देगा।

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

इस समस्या से आसानी से निपटने में आपकी मदद करने के लिए, PHP के दो अलग अलग फंक्शन है, जो उनकी वैल्यू द्वारा ऐरे को सॉर्ट करते समय key-value एसोसिएशन को बनाए रखते हैं। यह जो फंक्शन है asort() और arsort()। निम्न कोड स्निपेट एक ही $fruit_preferences ऐरे को सॉर्ट करता है लेकिन ऐसा करने के लिए asort() का उपयोग करता है।

जैसे कि ऊपर दिए गए उदाहरण से स्पष्ट होता है, Patricia के साथ अपना एसोसिएशन मेंटेन रखने के लिए Apple वैल्यू को शीर्ष पर ले जाता है। फलों के नामों को arsort() फंक्शन का उपयोग करके आसानी से रिवर्स में सॉर्ट किया जा सकता है।

यह दोनों फंक्शन एक जैसे सॉर्टिंग फ्लैग्स को अपने दूसरे ऑप्शनल पैरामीटर की वैल्यू को sort() और rsort() के रूप में स्वीकार करते हैं।

यूजर-डिफाइंड फंक्शंस के साथ ऐरे एलिमेंट्स को वैल्यू के साथ सॉर्ट करना

अलग-अलग फ्लैग की मदद से आपकी साधारण सॉर्टिंग जरूरतों को चार फंक्शन आसानी से हैंडल कर सकते हैं। हालांकि, कभी कभी ऐरे एलिमेंट्स को कंपेयर करने की आपके क्राइटेरिया अलग अलग हो सकते हैं।

मान ले कि आपके पास रेंडम शब्दों का एक ऐरे है, जिन्हें अक्षरों के अनुसार सॉर्ट किए जाने की आवश्यकता है। हालांकि, आप उन्हें अक्षरों के अनुसार सॉर्ट करने से पहले उनकी लंबाई के आधार पर उन्हें सॉर्ट करना चाहेंगे। उदाहरण के लिए, zoo को पारंपरिक अक्षरों के अनुसार सॉर्टिंग करने पर apple के बाद आना चाहिए। फिर भी, यदि आप बड़े शब्दों से पहले छोटे शब्द दिखाना चाहते हैं, zoo apple से पहले नजर आएगा। अक्षरों की उसी सेट में, ape zoo से पहले आएगा क्योंकि इन्हें अक्षरों के अनुसार ऑर्डर किया जाता है।

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

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

आप ऐरे को रेगुलर ऐरे में सॉर्ट करने के लिए usort() फंक्शन का उपयोग कर सकते हैं। इसी प्रकार, आप key-value एसोसिएशन को बनाए रखते हुए, अस्सोसिएटिव ऐरे की वैल्यूज को सॉर्ट करने के लिए uasort() फंक्शन का उपयोग कर सकते हैं।

नीचे दिया गया कोड स्निप्पेट इस बिहेवियर को पूरा करने का एक तरीका दिखाता है।

कस्टम सॉर्टिंग के लिए कॉलबैक फंक्शन में, हमें 0 से काम का एक इन्टिजर रिटर्न करना होगा यह दर्शाने के लिए की पहली वैल्यू दूसरी से छोटी है। 0 को रिटर्न करें यदि पहली व दूसरी के बराबर है। एक इन्टिजर जो कि 0 से बड़ा हो उसे रिटर्न करें यदि पहली वैल्यू दूसरी से बड़ी हो।

क्योंकि हमारा प्राइमरी सॉर्टिंग क्राइटेरिया स्ट्रिंग की लंबाई के बराबर था, इसलिए हम सीधे -1 रिटन करते हैं यदि पहला शब्द दूसरे के मुकाबले छोटा हो। इसी तरह से, हम सीधे 1 को रिटर्न करते हैं यदि पहला शब्द दूसरे की तुलना में लंबा हो। यदि दोनों शब्दों की लंबाई बराबर है, तो हम उन्हें strcmp() फंक्शन का उपयोग करके अल्फाबेट के अनुसार तुलना करते हैं और उनकी वैल्यू रिटन करते हैं।

जैसे कि आप आउटपुट में देख सकते हैं, हमारा कस्टम सॉर्ट फंक्शन ठीक उसी तरह से शब्दों को रीक्रिएट करता है, जैसा हम चाहते थे।

Key द्वारा एक ऐरे को सॉर्ट करना

जब आप अस्सोसिएटिव ऐरे के साथ काम कर रहे हो, तो इसकी key के आधार पर एक ऐरे को सॉर्ट करना आम तौर पर उपयोगी होता है। उदाहरण के लिए, आप अलग-अलग देशों में हवाई अड्डों की कुल संख्या के बारे में जानकारी के साथ एक ऐरे हो सकता है। यह मानते हुए के अलग-अलग देशों के नाम keys हैं और हवाई अड्डों की संख्या वैल्यू है, आप देश के नामों को अल्फाबेट के अनुसार सॉर्ट करना चाह सकते हैं। यह ksort() और krsort() फंक्शंस के साथ करना बहुत आसान है। यह दोनों फंक्शंस सॉर्ट करने के बाद ऐरे एलिमेंट्स के key-value एसोसिएशन को बनाए रखेगा। ksort() फंक्शन keys को छोटे से बड़े तक सॉर्ट करता है, और krsort() keys को बड़े से छोटे में सॉर्ट करता है।

यहां एक बेसिक सॉर्टिंग उदाहरण है:

आप uksort() फंक्शन का उपयोग करके ऐरे keys को सॉर्ट करने के लिए अपने स्वयं के कस्टम फंक्शन के साथ PHP भी प्रदान कर सकते हैं। usort() की तरह, uksort() में कॉल बैक फंक्शन के लिए भी आप को 0 से कम के इन्टिजर को रिटर्न करने की आवश्यकता होती है यदि पहली key को दूसरे से कम और इन्टिजर को जीरो से अधिक माना जाता है यदि पहली key दूसरी से बड़ी है। यह फंक्शन ऐरे एलिमेंट्स के key-value एसोसिएशन को भी बनाए रखता है।

ऊपर दिए गए उदाहरण में, हमने पिछले सेक्शन के कस्टम सॉर्ट फंक्शन का प्रयोग किया ताकि हम देशों के नाम को सॉर्ट कर सकें, पहले नामों की लंबाई के आधार पर और फिर अल्फाबेट के अनुसार।

PHP में मल्टी-डाइमेंशनल ऐरे को सॉर्ट करना

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

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

जब आप किसी विशेष फील्ड के आधार पर एक मल्टी-डाइमेंशनल ऐरे की वैल्यूज को सॉर्ट करना चाहते हैं, तो आप बस usort() फंक्शन के उपयोग कर सकते हैं। नीचे दिए गए उदाहरण से आपको इस तकनीक को बेहतर ढंग से समझने में मदद मिलेगी।

ऊपर दिए गए उदाहरण में, प्रत्येक बिल्डिंग के बारे में इंफॉर्मेशन मुख्य $tallest_buildings ऐरे के अंदर इसके स्वयं के ऐरे भी स्टोर किये जाते है। storey_sort() फंक्शन बस यह निर्धारित करने के लिए पहले से दूसरे बिल्डिंग में फ्लोर की संख्या घटाता है कि कौन सी बिल्डिंग हमारे क्राइटेरिया के अनुसार छोटी है। हमें एक खास नेगेटिव या पॉजिटिव वैल्यू को रिटर्न होने के बारे में चिंता करने की जरूरत नहीं है क्योंकि सभी नेगेटिव वैल्यू का मतलब छोटा और सभी पॉजिटिव वैल्यू का मतलब बड़ा होता है।

अंत में, हम मुख्य ऐरे के माध्यम से इटरेट करते हैं और प्रत्येक बिल्डिंग के बारे में जानकारी को प्रिंट आउट करते हैं।

अंतिम विचार

इस ट्यूटोरियल में, मैंने आपको PHP में कुछ अलग अलग फंक्शन दिखाएं, जिनका उपयोग ऐरे को उनके keys या उनके वैल्यू के आधार पर सॉर्ट करने के लिए किया जा सकता है। हमने यह भी सीखा कि कैसे uksort() और uasort() फंक्शन की सहायता से अपने स्वयं के कस्टम सॉर्टिंग क्राइटेरिया का उपयोग करके इसके keys और वैल्यूज द्वारा एक ऐरे को सेट करना है। अंतिम सेक्शन में चर्चा की गई कि केवल एक खास फील्ड का उपयोग करके एक मल्टी-डाइमेंशनल ऐरे में सभी वैल्यूज को कैसे सॉर्ट किया जाए।

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

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.