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