في PHP، تم تصميم وظيفة array_diff_assoc() للعثور على الفرق بين صفيفين مع إعطاء الأولوية لقيمة المفتاح أزواج. ومع ذلك، أثناء استخدام هذه الوظيفة لتصفية الصفوف من مصفوفة ثنائية الأبعاد بناءً على التقاطع مع مصفوفة ثنائية الأبعاد أخرى، فقد لا تؤدي دائمًا إلى النتائج المتوقعة.
تنشأ المشكلة بسبب المقارنة الصارمة التي تجريها array_diff_assoc(). يقارن تمثيلات السلسلة لأزواج القيمة الرئيسية أثناء المقارنة. وهذا يعني أنه حتى لو كان هناك زوجان من المفاتيح والقيمة يحتويان على نفس القيم، فإنهما لا يعتبران متساويين إلا إذا كانت تمثيلات السلسلة الخاصة بهما متطابقة.
ضع في اعتبارك نموذج البيانات التالي:
$array1 = [
[12 => 'new q sets'],
[11 => 'common set']
];
$array2 = [
[11 => 'common set']
];
عندما نحاول استخدام array_diff_assoc() لتصفية $array1 بناءً على الصفوف في $array2، نحصل على إخراج غير صحيح:
$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