دمج المصفوفات الترابطية
جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 15 من 68.
بينما تعمل array_merge() بسلاسة مع المصفوفات المفهرسة، يتغير سلوكها بشكل كبير عند التعامل مع المصفوفات الترابطية. الفرق الجوهري هو كيفية تعاملها مع مفاتيح النصوص المكررة بين المصفوفات التي يتم دمجها.
عند دمج المصفوفات الترابطية (associative arrays)، إذا كانت كلتا المصفوفتين تحتويان على نفس المفتاح النصي، فإن القيمة من المصفوفة اللاحقة ستحل محل القيمة من المصفوفة السابقة:
<?php
$defaults = ["theme" => "light", "language" => "english", "notifications" => true];
$userSettings = ["theme" => "dark", "notifications" => false];
$finalConfig = array_merge($defaults, $userSettings);
print_r($finalConfig);
// المخرجات: Array ( [theme] => dark [language] => english [notifications] => false )
?>لاحظ كيف تغيرت "theme" من "light" إلى "dark" وتغيرت "notifications" من true إلى false، بينما بقيت "language" كما هي "english" لأنها لم تُستبدل. هذا السلوك يجعل array_merge() مثالية لأنظمة الإعدادات حيث تريد استبدال القيم الافتراضية بتفضيلات المستخدم.
إن ترتيب الوسائط مهم؛ فالقيم من المصفوفات المدرجة لاحقاً في استدعاء الدالة تأخذ الأولوية على القيم السابقة. ينطبق سلوك الكتابة فوق القيم هذا فقط على المفاتيح النصية؛ أما المفاتيح الرقمية فيتم دائماً إعادة فهرستها بالتسلسل، تماماً كما هو الحال مع المصفوفات المفهرسة.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلستتلقى مدخلين: مصفوفة الإعدادات الافتراضية (default configuration) ومصفوفة تفضيلات المستخدم (user preferences)، وكلاهما بتنسيق JSON. قم بقراءة كلا المدخلين، وحوّل كل سلسلة JSON إلى مصفوفة ترابطية (associative array)، واستخدم array_merge() لدمجهما (مع جعل تفضيلات المستخدم تطغى على الإعدادات الافتراضية)، ثم اطبع التكوين المدمج باستخدام print_r().
تنسيق الإدخال: سطران - كل سطر يحتوي على كائن JSON يمثل مصفوفة ترابطية (مثال: {"theme":"light","language":"english"})
المخرجات المتوقعة: مصفوفة التكوين المدمجة حيث تحل تفضيلات المستخدم محل القيم الافتراضية، معروضة باستخدام print_r()
ورقة مرجعية
عند دمج المصفوفات الترابطية باستخدام array_merge()، يتم استبدال مفاتيح السلاسل النصية المكررة بالقيم من المصفوفات اللاحقة:
<?php
$defaults = ["theme" => "light", "language" => "english", "notifications" => true];
$userSettings = ["theme" => "dark", "notifications" => false];
$finalConfig = array_merge($defaults, $userSettings);
print_r($finalConfig);
// المخرجات: Array ( [theme] => dark [language] => english [notifications] => false )
?>السلوكيات الرئيسية:
- مفاتيح السلاسل النصية التي تحمل نفس الاسم: قيم المصفوفات اللاحقة تلغي قيم المصفوفات السابقة
- الترتيب مهم: المصفوفات المدرجة لاحقاً لها الأولوية
- يتم دائماً إعادة فهرسة المفاتيح الرقمية بشكل تسلسلي
- مثالي لأنظمة الإعدادات التي تحتوي على قيم افتراضية وتجاوزات من قبل المستخدم
جرّب بنفسك
<?php
// قراءة مدخلي JSON الاثنين
$defaultConfig = fgets(STDIN);
$userPreferences = fgets(STDIN);
// تحويل سلاسل JSON إلى مصفوفات ترابطية
$defaultArray = (array)json_decode($defaultConfig, true);
$userArray = (array)json_decode($userPreferences, true);
// TODO: اكتب كودك أدناه لدمج المصفوفات
// إخراج التكوين المدمج
print_r($mergedConfig);
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1الدوال المتقدمة
الدوال المجهولةالـ Closures وكلمة 'use'دوال السهمدوال الـ Callbackاستخدام 'call_user_func'دوال المتغيراتالتمرير بالمرجعالدوال العوديةمراجعة: مزيج الدوال4المصفوفات متعددة الأبعاد
إنشاء مصفوفة ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادتعديل عناصر المصفوفة ثنائية الأبعادالتكرار باستخدام الحلقات المتداخلةالمصفوفات الترابطية ثنائية الأبعادمراجعة: تمرين الشبكة البسيطة2معالجة المصفوفات المتقدمة
الإضافة باستخدام 'array_push'الحذف باستخدام 'array_pop'الإضافة باستخدام 'array_unshift'الحذف باستخدام 'array_shift'دمج المصفوفات المفهرسةدمج المصفوفات الترابطيةالاستخراج باستخدام 'array_slice'القيم باستخدام 'in_array'المفاتيح باستخدام 'array_search'مراجعة: تمرين قائمة التشغيل3ترتيب المصفوفات
ترتيب المصفوفات المفهرسة تصاعدياًترتيب المصفوفات المفهرسة تنازلياًترتيب المصفوفات الترابطية حسب القيمةترتيب المصفوفات الترابطية حسب المفتاحالترتيب بالترتيب الطبيعيالترتيب المخصص باستخدام 'usort'مراجعة: ترتيب لوحة المتصدرين