انتقل إلى محتوى الدرس
الدرس 30
دورة PHP

المصفوفات متعددة الأبعاد وتفكيك المصفوفات في PHPPHP Multidimensional Arrays and Array Unpacking

تعلّم المصفوفات متعددة الأبعاد وتفكيك المصفوفات في PHP بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
3
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

المصفوفة متعددة الأبعاد (Multidimensional Array) هي مصفوفة يكون كل عنصر بداخلها عبارة عن مصفوفة أخرى. وبينما تخزن المصفوفة أحادية البعد قائمة مسطحة من القيم، تنظم المصفوفة ثنائية الأبعاد (2D) البيانات في صفوف وأعمدة تماماً مثل جداول البيانات أو جداول قواعد البيانات.

يمكنك تداخل مصفوفات مفهرسة داخل مصفوفات مفهرسة لتكوين شبكة رقمية، أو تداخل مصفوفات ترابطية لبناء شجرة إعدادات منظمة.

مخطط المصفوفات متعددة الأبعاد في PHP 8.4 وتمثيل السجلات الجدولية والأقواس المتسلسلة وحلقات foreach المتداخلة
PHP
<?php
$grid = [
    [10, 20, 30],
    [40, 50, 60],
];

echo 'Row 0, Col 2: ' . $grid[0][2]; // 30

النمط الأكثر شيوعاً في تطوير تطبيقات الويب الواقعية بلغة PHP هو مصفوفة خارجية مفهرسة رقمياً تضم بداخلها مصفوفات فرعية ترابطية. تمثل كل مصفوفة ترابطية داخلية سجلاً واحداً (مثل مستخدم أو منتج أو فاتورة) بمفاتيح نصية واضحة مثل 'id' و 'title' و 'price'.

PHP
<?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
<?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 متداخلة ثانية داخل الحلقة الأولى.

مخطط تدفق التنفيذ العملي لقسم حلقات foreach المتداخلة للجداول في لغة PHP
PHP
<?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
<?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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Nested Arrays المصفوفات المتداخلة
تعلّم المصفوفات متعددة الأبعاد وتفكيك المصفوفات في PHP بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
للمراجعة
02 Arrays Inside Arrays Concept مفهوم المصفوفات متعددة الأبعاد
المفهوم الأساسي لقسم مفهوم المصفوفات متعددة الأبعاد في لغة PHP الحديثة.
للمراجعة
03 Two Dimensional Tabular Records تمثيل سجلات الجداول ثنائية الأبعاد
الصياغة البرمجية والتطبيق العملي المباشر لقسم تمثيل سجلات الجداول ثنائية الأبعاد.
للمراجعة
04 Chained Bracket Element Access الوصول للعناصر بالأقواس المتسلسلة
قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم الوصول للعناصر بالأقواس المتسلسلة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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 ويرسلها إلى متصفح العميل بعد التنفيذ.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم مفهوم المصفوفات متعددة الأبعاد للتحقق من المخرجات.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم تمثيل سجلات الجداول ثنائية الأبعاد وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما المقصود بالمصفوفة متعددة الأبعاد (Multidimensional Array) في لغة PHP؟

اختر التعريف الهيكلي الصحيح للمصفوفة متعددة الأبعاد.

02

في المصفوفة $users = [ ['name' => 'Ali'], ['name' => 'Sara'] ]; ماذا تُرجع الدالة count($users)؟

احسب عدد العناصر في المستوى الخارجي للمصفوفة.

03

في المصفوفة $items = [ ['code' => 'A1'], ['code' => 'B2'] ]; أي تعبير يصل إلى القيمة النصية "B2"؟

تذكر أن فهرسة المصفوفة الخارجية تبدأ من الرقم 0.

04

هل يمكنك تعديل قيمة متداخلة بعينها مباشرة عبر عبارة الإسناد $departments['design']['members'] = 6;؟

أكد إمكانية تعديل عنصر متداخل مباشرة بالأقواس المتسلسلة.

05

لماذا يجب اختيار أسماء متغيرات مختلفة للحلقة الخارجية والداخلية عند كتابة حلقات foreach متداخلة؟

حدد أهمية عدم تكرار نفس اسم المتغير في الحلقتين.

06

أي معامل يُرجع قيمة افتراضية بأمان تام عندما يكون أحد المفاتيح في المسار المتداخل $settings['cache']['driver'] غير موجود؟

اختر معامل الدمج الصفري.

07

هل يؤدي تنفيذ التعبير $settings['missingSection']['missingKey'] ?? 'default' إلى ظهور تحذير Undefined array key في PHP 8.4؟

تحقق من أن معامل ?? يمنع ظهور تحذير المفتاح غير المعرف على طول المسار المتداخل.

08

أي هيكلين من الهياكل الواقعية التالية يُمثلان بطبيعتهما كمصفوفات ثنائية الأبعاد في PHP؟

اختر الهيكلين الصحيحين.