في هذا الدرس 6تصفّح المواضيع
المصفوفة متعددة الأبعاد (Multidimensional Array) هي مصفوفة يكون كل عنصر بداخلها عبارة عن مصفوفة أخرى. وبينما تخزن المصفوفة أحادية البعد قائمة مسطحة من القيم، تنظم المصفوفة ثنائية الأبعاد (2D) البيانات في صفوف وأعمدة تماماً مثل جداول البيانات أو جداول قواعد البيانات.
يمكنك تداخل مصفوفات مفهرسة داخل مصفوفات مفهرسة لتكوين شبكة رقمية، أو تداخل مصفوفات ترابطية لبناء شجرة إعدادات منظمة.
<?php
$grid = [
[10, 20, 30],
[40, 50, 60],
];
echo 'Row 0, Col 2: ' . $grid[0][2]; // 30
النمط الأكثر شيوعاً في تطوير تطبيقات الويب الواقعية بلغة PHP هو مصفوفة خارجية مفهرسة رقمياً تضم بداخلها مصفوفات فرعية ترابطية. تمثل كل مصفوفة ترابطية داخلية سجلاً واحداً (مثل مستخدم أو منتج أو فاتورة) بمفاتيح نصية واضحة مثل 'id' و 'title' و 'price'.
<?php
$products = [
['id' => 1, 'title' => 'Laptop Stand', 'stock' => 14],
['id' => 2, 'title' => 'USB-C Hub', 'stock' => 8],
['id' => 3, 'title' => 'Webcam HD', 'stock' => 0],
];
echo 'Total records: ' . count($products);
لقراءة أو تعديل عنصر محدد داخل مصفوفة متعددة الأبعاد، نستخدم الأقواس المربعة المتسلسلة من المستوى الخارجي نحو الداخلي بالصيغة: $array[$outerKey][$innerKey]. وفي الهياكل ثلاثية الأبعاد نضيف قوساً ثالثاً بالصيغة: $catalog[$category][$index][$field].
<?php
$departments = [
'engineering' => ['lead' => 'Mazen', 'members' => 12],
'design' => ['lead' => 'Reem', 'members' => 5],
];
$departments['design']['members'] = 6;
echo $departments['design']['lead'] . ' (' . $departments['design']['members'] . ')';
للمرور على عناصر مصفوفة ثنائية الأبعاد، نستخدم حلقة foreach للمرور على الصفوف الخارجية. وإذا كانت مفاتيح كل سجل معروفة مسبقاً نصل إليها مباشرة مثل $row['title']، أما لعرض كافة المفاتيح والقيم ديناميكياً فنضع حلقة foreach متداخلة ثانية داخل الحلقة الأولى.
<?php
$scores = [
'GroupA' => ['Ali' => 95, 'Omar' => 88],
'GroupB' => ['Sara' => 98, 'Lina' => 91],
];
foreach ($scores as $groupName => $students) {
foreach ($students as $student => $grade) {
echo $groupName . ' - ' . $student . ': ' . $grade . "\n";
}
}
عند التعامل مع مصفوفات الإعدادات العميقة أو البيانات المتداخلة، قد يكون أحد المفاتيح الوسيطة غير موجود. وتؤدي محاولة قراءة $data['profile']['city'] مباشرة عند غياب المفتاح 'profile' إلى إطلاق تحذير Undefined array key.
استخدم معامل الدمج الصفري ?? (أو دالة isset()) مع المسارات المتداخلة؛ فالصيغة $city = $data['profile']['city'] ?? 'Riyadh'; تُرجع القيمة البديلة بأمان تام دون أي تحذير حتى لو غاب المستوى الأول بالكامل!
<?php
$settings = [
'database' => ['host' => '127.0.0.1', 'port' => 3306],
];
$dbHost = $settings['database']['host'] ?? 'localhost';
$cacheDriver = $settings['cache']['driver'] ?? 'file';
echo $dbHost . ' | ' . $cacheDriver;
يلخص الجدول المرجعي التالي الأنماط القياسية للمصفوفات متعددة الأبعاد في PHP 8.4:
| النمط / الصيغة | البنية الهيكلية | الاستخدام العملي الشائع |
|---|---|---|
$grid[$row][$col] | خارجية مفهرسة + داخلية مفهرسة | الشبكات الرقمية، المصفوفات الرياضية، وخلايا ملفات CSV |
$rows[$i]['field'] | خارجية مفهرسة + داخلية ترابطية | نتائج استعلامات قواعد البيانات وقوائم المنتجات والمستخدمين |
$tree['section']['key'] | خارجية ترابطية + داخلية ترابطية | شجرة إعدادات التطبيق وقواميس الترجمة متعددة اللغات |
حلقات foreach المتداخلة | حلقة خارجية للصفوف + داخلية للأعمدة | توليد جداول HTML والقوائم المصنفة حسب الفئات |
$a['x']['y'] ?? $default | معامل الدمج الصفري للمسار العميق | قراءة المفاتيح المتداخلة الاختيارية بأمان دون تحذيرات |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
لقد أتقنت في هذا الدرس بناء المصفوفات متعددة الأبعاد، وتمثيل السجلات الجدولية، والوصول للعناصر بالأقواس المتسلسلة [][]، واستخدام حلقات foreach المتداخلة، والقراءة الآمنة للمفاتيح العميقة بمعامل ??. الخطوة التالية هي الانتقال إلى الدرس الرابع والعشرين (php-sorting-arrays) لتعلّم دوال ترتيب المصفوفات تصاعدياً وتنازلياً.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Nested Arrays المصفوفات المتداخلة
- تعلّم المصفوفات متعددة الأبعاد وتفكيك المصفوفات في PHP بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
- للمراجعة
- 02 Arrays Inside Arrays Concept مفهوم المصفوفات متعددة الأبعاد
- المفهوم الأساسي لقسم مفهوم المصفوفات متعددة الأبعاد في لغة PHP الحديثة.
- للمراجعة
- 03 Two Dimensional Tabular Records تمثيل سجلات الجداول ثنائية الأبعاد
- الصياغة البرمجية والتطبيق العملي المباشر لقسم تمثيل سجلات الجداول ثنائية الأبعاد.
- للمراجعة
- 04 Chained Bracket Element Access الوصول للعناصر بالأقواس المتسلسلة
- قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم الوصول للعناصر بالأقواس المتسلسلة.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 PHP PHP
- PHP: Hypertext Preprocessor
- لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
- للمراجعة
- 02 CLI CLI
- Command-Line Interface
- واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
- للمراجعة
- 03 FPM FPM
- FastCGI Process Manager
- مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
- للمراجعة
- 04 HTML HTML
- HyperText Markup Language
- لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم مفهوم المصفوفات متعددة الأبعاد للتحقق من المخرجات.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم تمثيل سجلات الجداول ثنائية الأبعاد وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما المقصود بالمصفوفة متعددة الأبعاد (Multidimensional Array) في لغة PHP؟
اختر التعريف الهيكلي الصحيح للمصفوفة متعددة الأبعاد.
في المصفوفة $users = [ ['name' => 'Ali'], ['name' => 'Sara'] ]; ماذا تُرجع الدالة count($users)؟
احسب عدد العناصر في المستوى الخارجي للمصفوفة.
في المصفوفة $items = [ ['code' => 'A1'], ['code' => 'B2'] ]; أي تعبير يصل إلى القيمة النصية "B2"؟
تذكر أن فهرسة المصفوفة الخارجية تبدأ من الرقم 0.
هل يمكنك تعديل قيمة متداخلة بعينها مباشرة عبر عبارة الإسناد $departments['design']['members'] = 6;؟
أكد إمكانية تعديل عنصر متداخل مباشرة بالأقواس المتسلسلة.
لماذا يجب اختيار أسماء متغيرات مختلفة للحلقة الخارجية والداخلية عند كتابة حلقات foreach متداخلة؟
حدد أهمية عدم تكرار نفس اسم المتغير في الحلقتين.
أي معامل يُرجع قيمة افتراضية بأمان تام عندما يكون أحد المفاتيح في المسار المتداخل $settings['cache']['driver'] غير موجود؟
اختر معامل الدمج الصفري.
هل يؤدي تنفيذ التعبير $settings['missingSection']['missingKey'] ?? 'default' إلى ظهور تحذير Undefined array key في PHP 8.4؟
تحقق من أن معامل ?? يمنع ظهور تحذير المفتاح غير المعرف على طول المسار المتداخل.
أي هيكلين من الهياكل الواقعية التالية يُمثلان بطبيعتهما كمصفوفات ثنائية الأبعاد في PHP؟
اختر الهيكلين الصحيحين.