"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > PHP में किसी अन्य 2D ऐरे के साथ अंतर्संबंध के आधार पर 2D ऐरे से पंक्तियों को कैसे फ़िल्टर करें?

PHP में किसी अन्य 2D ऐरे के साथ अंतर्संबंध के आधार पर 2D ऐरे से पंक्तियों को कैसे फ़िल्टर करें?

2024-11-08 को प्रकाशित
ब्राउज़ करें:343

How to Filter Rows from a 2D Array Based on Intersection with Another 2D Array in PHP?

पंक्ति इंटरसेक्शन के आधार पर 2डी सरणी की पंक्तियों को फ़िल्टर करना

PHP में, array_diff_assoc() फ़ंक्शन को कुंजी-मान को प्राथमिकता देते हुए दो सरणियों के बीच अंतर खोजने के लिए डिज़ाइन किया गया है जोड़े. हालाँकि, किसी अन्य 2डी सरणी के साथ प्रतिच्छेदन के आधार पर 2डी सरणी से पंक्तियों को फ़िल्टर करने के लिए इस फ़ंक्शन का उपयोग करते समय, यह हमेशा अपेक्षित परिणाम नहीं दे सकता है।

समस्या को समझना

समस्या के कारण उत्पन्न होती है array_diff_assoc() द्वारा की गई सख्त तुलना। यह तुलना के दौरान कुंजी-मूल्य जोड़े के स्ट्रिंग प्रतिनिधित्व की तुलना करता है। इसका मतलब यह है कि भले ही दो कुंजी-मूल्य जोड़े में समान मान हों, उन्हें तब तक समान नहीं माना जाता जब तक कि उनकी स्ट्रिंग प्रस्तुति समान न हो।

नमूना डेटा

निम्नलिखित नमूना डेटा पर विचार करें:

$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

$array2 = [
    [11 => 'common set']
];

गलत आउटपुट

जब हम $array2 में पंक्तियों के आधार पर $array1 को फ़िल्टर करने के लिए array_diff_assoc() का उपयोग करने का प्रयास करते हैं, तो हमें एक गलत आउटपुट मिलता है:

$output = array_diff_assoc($array1, $array2);

print_r($output);
// Output: [
//     [11 => 'common set']
// ]

यह आउटपुट दिखाता है कि सामान्य पंक्ति परिणाम में मौजूद है, जबकि इच्छित आउटपुट में $array1 से विशेष पंक्ति शामिल होनी चाहिए।

समस्या का कारण

जैसा कि पहले उल्लेख किया गया है, समस्या array_diff_assoc() द्वारा की गई सख्त तुलना में है। निम्नलिखित दो सरणियों की तुलना करते समय:

Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )

फ़ंक्शन परिणाम के रूप में अलग-अलग कुंजी-मूल्य जोड़ी लौटाता है क्योंकि कुंजी-मूल्य जोड़े स्ट्रिंग-समान नहीं हैं।

सही दृष्टिकोण

इस समस्या को हल करने के लिए, हम थोड़ा अलग दृष्टिकोण का उपयोग कर सकते हैं जो सरणियों में विशिष्ट कुंजी-मानों के अस्तित्व की जांच करता है:

$filteredRows = array_filter($array1, function($row) use ($array2) {
    return !in_array($row, $array2);
});

print_r($filteredRows);
// Output: [
//     [12 => 'new q sets']
// ]

यह दृष्टिकोण यह जांचने के लिए in_array() का उपयोग करता है कि $array1 की प्रत्येक पंक्ति $array2 में मौजूद है या नहीं। यदि कोई पंक्ति $array2 में मौजूद नहीं है, तो उसे फ़िल्टर किए गए परिणामों में शामिल किया जाता है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3