सरणियों के साथ काम करने के लिए कार्य। सेट थ्योरी - PHP: ऐरे - हेक्सलेट Php मूल्य के अनुसार ऐरे का प्रतिच्छेदन

समुच्चय सिद्धान्त। मैं जानता हूं कि कितने लोग गणितज्ञों से डरते हैं, लेकिन विशेष रूप से सेट सिद्धांत (भोला) बहुत सरल और समझने योग्य है। इसके अलावा, हम रोजमर्रा की जिंदगी में इसके तत्वों का लगातार उपयोग करते हैं। और प्रोग्रामिंग में यह हर कदम पर होता है।

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

अनंत समुच्चय का एक उदाहरण प्राकृतिक संख्याएँ हैं। बदले में, प्राकृतिक संख्याओं का समुच्चय पूर्णांकों का एक उपसमुच्चय होता है, जो बदले में परिमेय संख्याओं का उपसमुच्चय होता है, इत्यादि।

"उपसमुच्चय" का अर्थ है कि एक समुच्चय के सभी तत्वों को दूसरे समुच्चय में भी शामिल किया जाता है, इसे कहा जाता है सुपरसेट(एक उपसमुच्चय के सापेक्ष)।

समुच्चयों को वृत्तों द्वारा प्रदर्शित करना काफी सुविधाजनक है। आप शीघ्रता से आकलन कर सकते हैं कि विभिन्न सेट एक-दूसरे से कैसे संबंधित हैं।

लेकिन संख्याएँ जैसी गणितीय वस्तुएँ सेट की एकमात्र संभावित वस्तुएँ नहीं हैं। एक समूह को बस स्टॉप पर खड़े होकर अपनी बस का इंतजार कर रहे लोगों का समूह या एक घर, शहर या देश के अपार्टमेंट के निवासियों का समूह कहा जा सकता है। किसी भी वस्तु का कोई संग्रह जिसे हम एक संपूर्ण के रूप में मानना ​​चाहते हैं।

सेट सिद्धांत में हमारे लिए मुख्य बात उन पर संचालन है। इनमें शामिल हैं: जोड़, संघ, प्रतिच्छेदन, अंतर, कार्टेशियन उत्पाद और कुछ अन्य।

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

प्रोग्रामिंग की ओर बढ़ते हुए, आप देखेंगे कि एक ऐरे एक सेट के समान ही है, और इसे वास्तव में इस तरह सोचा जा सकता है। यह क्यों इतना महत्वपूर्ण है? कुछ परिचालनों के पीछे के सिद्धांतों को समझकर, आप उन्हें सबसे तेज़ और सबसे कुशल तरीके से लागू कर सकते हैं। उदाहरण के लिए, यह जानते हुए कि आपको php में एक सेट इंटरसेक्शन ऑपरेशन की आवश्यकता है, आप एक फ़ंक्शन ढूंढने का प्रयास कर सकते हैं जो कार्य करता है। ऐसा करने के लिए, बस Google में क्वेरी दर्ज करें: php सेट प्रतिच्छेद(सेट - सेट, इंटरसेक्ट - इंटरसेक्शन)। खोज परिणामों में पहला (कम से कम मेरे लिए) लिंक वांछित array_intersect फ़ंक्शन की ओर ले जाता है। अन्य परिचालनों के साथ भी यही बात आपका इंतजार कर रही है। यह इस प्रश्न का आंशिक उत्तर है कि "क्या प्रोग्रामर को गणित की आवश्यकता है?"

वैसे, सभी भाषाओं में सेट के साथ काम करने के लिए अंतर्निहित फ़ंक्शन नहीं होते हैं। कुछ में, आपको इसके लिए अतिरिक्त लाइब्रेरी स्थापित करने की आवश्यकता है, और कुछ में, उदाहरण के लिए, रूबी में, सेट के साथ संचालन अंकगणितीय ऑपरेटरों (सेट का संघ: कॉल 1 + कॉल 2) का उपयोग करके कार्यान्वित किया जाता है।

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

आइए बुनियादी परिचालनों पर नजर डालें:

चौराहा

सेटों का प्रतिच्छेदन एक ऐसा सेट है जिसमें ऐसे तत्व शामिल होते हैं जो एक ही समय में सभी दिए गए सेटों में दिखाई देते हैं।

["वास्या", "पेट्या"]

यह फ़ंक्शन किसी भी संख्या में सारणी स्वीकार करता है। यानी, आप एक कॉल में किसी भी संख्या में सरणियों का प्रतिच्छेदन पा सकते हैं।

एक संस्था

समुच्चयों का संघ एक ऐसा समुच्चय है जिसमें दिए गए सभी समुच्चयों के तत्व शामिल होते हैं। PHP में सेट यूनियन एक कॉल के साथ नहीं किया जा सकता है, लेकिन इसे दो कार्यों को जोड़कर अनुकरण किया जा सकता है:

["वास्या", "कोल्या", "पेट्या", "इगोर", "पेट्या", "सर्गेई", "वास्या", "साशा"]; // अद्वितीय डुप्लिकेट हटाता है $sharedFriends = array_unique($friends); // => ["वास्या", "कोल्या", "पेट्या", "इगोर", "सर्गेई", "साशा"]

जोड़ (अंतर)

दो सेटों का अंतर एक ऐसा सेट है जिसमें पहले सेट के वे तत्व शामिल होते हैं जो दूसरे सेट में शामिल नहीं होते हैं। प्रोग्रामिंग में, इस ऑपरेशन को अक्सर कहा जाता है अंतर.

["कोल्या"]

भीड़ से संबंधित

आप in_array फ़ंक्शन का उपयोग करके जांच सकते हैं कि कोई तत्व सेट से संबंधित है या नहीं:

काम
दो सरणियाँ हैं, और आप उनका संघ (सभी तत्व, लेकिन यदि कोई तत्व दोनों सरणियों में है, तो इसे एक बार गिना जाता है), प्रतिच्छेदन (दोनों सरणियों में तत्व), या अंतर (एक सरणी में तत्व जो नहीं हैं) ढूंढना चाहते हैं अन्य)।

समाधान
संघ को परिभाषित करने के लिए:
$संघ = array_unique(array_merge($a, $b));

प्रतिच्छेदन की गणना करने के लिए:
$चौराहा = array_intersection($a, $b);

एक साधारण अंतर खोजने के लिए:
$अंतर = array_diff($a, $b);

और सममित अंतर प्राप्त करने के लिए (अनन्य OR):

बहस
ऐसी गणनाओं के लिए आवश्यक कई घटक PHP में निर्मित होते हैं; आपको बस उन्हें उचित अनुक्रम में संयोजित करने की आवश्यकता है।

जब दो सरणियों से एक संघ प्राप्त किया जाता है, तो मूल सरणियों के सभी मानों के साथ एक विशाल सरणी बनाई जाती है। लेकिन array_merge() फ़ंक्शन दो संख्यात्मक सरणियों को मर्ज करते समय डुप्लिकेट मानों की अनुमति देता है, इसलिए आपको array_unique() फ़ंक्शन को कॉल करने की आवश्यकता है।
ऐसे तत्वों को फ़िल्टर करने के लिए.

हालाँकि, इसके परिणामस्वरूप अंतराल हो सकता है क्योंकि array_unique() फ़ंक्शन सरणी को कॉम्पैक्ट नहीं करता है। हालाँकि, यह कोई समस्या नहीं है क्योंकि फ़ोरैच स्टेटमेंट और प्रत्येक() फ़ंक्शन दोनों बिना किसी हस्तक्षेप के कम आबादी वाले ऐरे को संभालते हैं।

प्रतिच्छेदन की गणना के लिए फ़ंक्शन को केवल array_intersection() नाम दिया गया है और इसके लिए किसी अतिरिक्त प्रयास की आवश्यकता नहीं है।

Array_diff() फ़ंक्शन एक सारणी लौटाता है जिसमें $old सारणी के सभी अद्वितीय तत्व होते हैं जो $new सारणी में नहीं हैं। इसे साधारण अंतर कहा जाता है:


$अंतर = array_diff($पुराना, $नया);
सरणी
=> नहीं
=> को
)

परिणामी $difference सरणी में "नहीं" और "to" शामिल है क्योंकि array_diff() केस संवेदनशील है। इसमें "कुछ भी" तत्व शामिल नहीं है क्योंकि यह $old सरणी में नहीं है।

व्युत्क्रम अंतर प्राप्त करने के लिए, या, दूसरे शब्दों में, $new सरणी के अद्वितीय तत्वों को खोजने के लिए जो $old सरणी में गायब हैं, आपको तर्कों को स्वैप करने की आवश्यकता है:
$पुराना = सरणी("को", "होना", "या", "नहीं", "को", "होना");
$नया = सरणी('प्रति', 'होना', 'या', 'जो कुछ भी');
$रिवर्स_डिफ = एरे_डिफ($नया, $पुराना);
सरणी
=> जो भी हो
)

$revers_diff सरणी में केवल "जो भी हो" तत्व शामिल है।

यदि आपको array_diff() फ़ंक्शन में कोई फ़ंक्शन या अन्य फ़िल्टर लागू करने की आवश्यकता है, तो अपना स्वयं का अंतर (घटाव) एल्गोरिदम एम्बेड करें:

// केस-असंवेदनशील घटाव एल्गोरिदम लागू करें; अंतर -i
$देखा = सरणी();
foreach ($n के रूप में नया) (
$देखा++;
}
foreach ($o जितना पुराना) (
$o = strtolower($o);
यदि (!$देखा गया[$o]) ($diff[$o] = $o; )
}

पहला फ़ोरैच स्टेटमेंट आगे की खोज के लिए एक सहयोगी सरणी बनाता है।

फिर यह $old सरणी के माध्यम से लूप करता है और, यदि खोज के दौरान तत्व नहीं मिलता है, तो इसे $diff सरणी में जोड़ा जाता है।

array_diff() और array_map() फ़ंक्शंस को मिलाकर इस प्रक्रिया को तेज़ किया जा सकता है:

$diff = array_diff(array_map("strtolower", $old),
array_map("strtolower", $new));

सममित अंतर यह है कि $a में क्या है लेकिन $b में नहीं, साथ ही $b में क्या है लेकिन $a में नहीं है:

$अंतर = array_merge(array_diff($a, $b), array_diff($b, $a));

एक बार स्थापित होने पर, एल्गोरिदम आगे बढ़ता है। Array_diff() फ़ंक्शन को दो बार कॉल किया जाता है और दो अंतर निर्धारित करता है। फिर उन्हें एक सरणी में जोड़ दिया जाता है। array_unique() को कॉल करने की कोई आवश्यकता नहीं है क्योंकि इन सारणियों को विशेष रूप से कोई सामान्य तत्व न रखने के लिए डिज़ाइन किया गया था।

ये फ़ंक्शन आपको विभिन्न तरीकों से सरणियों में हेरफेर करने की अनुमति देते हैं। सारणी भंडारण, संशोधन और चर के सेट के साथ काम करने के लिए आदर्श हैं।

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

PHP में ऐरे कैसे बनाए और उपयोग किए जाते हैं, इसके बारे में अधिक जानने के लिए, इस ट्यूटोरियल का ऐरेज़ अध्याय देखें।

इंस्टालेशन

इन सुविधाओं का उपयोग करने के लिए किसी इंस्टॉलेशन की आवश्यकता नहीं है क्योंकि ये PHP कोर का हिस्सा हैं।

पूर्वनिर्धारित स्थिरांक

नीचे सूचीबद्ध स्थिरांक हमेशा PHP कोर के भाग के रूप में उपलब्ध होते हैं।

केस_कम(पूर्णांक)

केस_कमफ़ंक्शन के साथ प्रयोग किया जाता है array_change_key_case()यह इंगित करने के लिए कि क्या सरणी कुंजियों को लोअरकेस वर्णों में परिवर्तित किया जाना चाहिए। डिफ़ॉल्ट फ़ंक्शन array_change_key_case()इस स्थिरांक का उपयोग किया जाता है.

CASE_UPPER(पूर्णांक)

CASE_UPPERफ़ंक्शन के साथ प्रयोग किया जाता है array_change_key_case()यह इंगित करने के लिए कि क्या सरणी कुंजियों को अपरकेस वर्णों में परिवर्तित किया जाना चाहिए।

array_change_key_case - एक सरणी लौटाएं जिसकी वर्ण कुंजियाँ ऊपरी या निचले केस वर्णों में परिवर्तित हो जाती हैं array_chunk - एक सरणी को टुकड़ों में विभाजित करें array_combine - एक सरणी को कुंजियों के रूप में और दूसरे को संबंधित मानों के रूप में उपयोग करके एक नई सरणी बनाएं array_count_values ​​​​- - सभी मानों की गिनती की गणना करें array_diff_assoc - अतिरिक्त सूचकांक जाँच के साथ सरणी विचलन की गणना करें array_diff_key - कुंजियों की तुलना करके सरणी विचलन की गणना करें array_diff_usoc - उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन का उपयोग करके किए गए अतिरिक्त सूचकांक जाँच के साथ सरणी विचलन की गणना करें array_diff_ukey - का उपयोग करके सरणी विचलन की गणना करें कुंजी तुलना कॉलबैक array_diff - सरणी विचलन की गणना करें array_fill - एक विशिष्ट मान के साथ एक सरणी भरें array_filter - array_flip कॉलबैक का उपयोग करके किसी सरणी में एक फ़िल्टर लागू करें - सरणी मानों को स्वैप करें array_intersect_assoc - अतिरिक्त सूचकांक जांच के साथ सरणी अभिसरण की गणना करें array_intersect_key - कुंजियों की तुलना करके सरणी प्रतिच्छेदन की गणना करें array_intersect_uassoc - उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन array_intersect_ukey का उपयोग करके किए गए अतिरिक्त सूचकांक जांच के साथ सरणी प्रतिच्छेदन की गणना करें - कुंजी तुलना कॉलबैक का उपयोग करके सरणी प्रतिच्छेदन की गणना करें array_intersect - सरणी अभिसरण की गणना करें array_key_exists - जांचें कि क्या निर्दिष्ट कुंजी या सूचकांक सरणी में मौजूद है array_keys - सरणी में सभी कुंजियों का चयन करें array_map - निर्दिष्ट सरणी के सभी तत्वों पर कॉलबैक फ़ंक्शन लागू करें array_merge_recursive - दो या दो से अधिक सरणी को पुनरावर्ती रूप से मर्ज करें array_merge - दो या अधिक सरणी को मर्ज करें array_multisort -- एकाधिक क्रमबद्ध करें सरणियाँ या बहुआयामी सरणियाँ array_pad - किसी सरणी के आकार को दिए गए मान तक बढ़ाएँ array_pop - किसी सरणी के अंतिम तत्व को पुनः प्राप्त करें array_product - सरणी मानों के उत्पाद की गणना करें array_push - के अंत में एक या अधिक तत्व जोड़ें एक सरणी array_rand - array_reduce से एक या अधिक यादृच्छिक मान चुनें - कॉलबैक फ़ंक्शन का उपयोग करके किसी सरणी को एकल मान में पुनरावर्ती रूप से कम करें array_revers - रिवर्स ऑर्डर में तत्वों के साथ एक सरणी लौटाता है array_search - किसी दिए गए मान के लिए सरणी खोजता है और सफल होने पर संबंधित कुंजी लौटाता है array_shift - सरणी का पहला तत्व प्राप्त करें array_slice - - सरणी का एक टुकड़ा चुनें array_splice - सरणी तत्वों का एक अनुक्रम निकालें और इसे दूसरे अनुक्रम से बदलें array_sum - सरणी मानों के योग की गणना करें ​array_udiff_assoc -- मानों की तुलना करने के लिए कॉलबैक फ़ंक्शन array_udiff_uassoc का उपयोग करके, अतिरिक्त अनुक्रमणिका जांच के साथ सरणियों में विचलन की गणना करें-- मानों और सूचकांकों की तुलना करने के लिए array_udiff कॉलबैक फ़ंक्शन का उपयोग करके अतिरिक्त अनुक्रमणिका जांच के साथ सारणी में विचलन की गणना करें -- गणना करें तुलना के लिए array_uintersect_assoc कॉलबैक फ़ंक्शन का उपयोग करके सरणी विचलन - मूल्यों की तुलना करने के लिए array_uintersect_assoc कॉलबैक फ़ंक्शन का उपयोग करके अतिरिक्त इंडेक्स जांच के साथ सरणी चौराहे की गणना करें - सूचकांक और मानों की तुलना करने के लिए array_uintersect_assoc कॉलबैक का उपयोग करके अतिरिक्त इंडेक्स जांच के साथ सरणी चौराहे की गणना करें - - मानों की तुलना करने के लिए array_unique कॉलबैक का उपयोग करके सरणियों के प्रतिच्छेदन की गणना करें - किसी सरणी से डुप्लिकेट मान हटाएं array_unshift - सरणी की शुरुआत में एक या अधिक तत्व जोड़ें array_values ​​​​- सभी मानों का चयन करें एक सरणी array_walk_recursive - सरणी के प्रत्येक तत्व के लिए एक कस्टम फ़ंक्शन को पुनरावर्ती रूप से लागू करें array_walk - सरणी सरणी के प्रत्येक तत्व के लिए एक कस्टम फ़ंक्शन लागू करें - एक सरणी arsort बनाएं - कुंजियों को संरक्षित करते हुए, सरणी को उल्टे क्रम में क्रमबद्ध करें - - कुंजी को कॉम्पैक्ट बनाए रखते हुए सरणी को क्रमबद्ध करें - चर नाम और उनके मानों वाली एक सरणी बनाएं