المصفوفة متعددة الأبعاد مصفوفة عناصرها مصفوفات. تقرؤها بزوج أقواس لكل مستوى: $grid[1][2] هي الصف 1، العمود 2، و$users[0]['name'] هو الاسم في السجل الأول.
الشكل الثاني، قائمة من السجلات ذات حقول مسماة، هو الذي ستقابله أكثر: فهو ما يعطيك إياه عادة استعلام قاعدة بيانات، أو استجابة JSON بعد فك ترميزها، أو ملف CSV بعد تحليله. كل سجل مصفوفة ترابطية.
إنشاء مصفوفات متداخلة
يمكن أن يذهب التداخل إلى أي عمق تحتاجه، ويمكن للمستويات أن تجمع بين مفاتيح رقمية ونصية. ومصفوفة الإعدادات مثال شائع: أقسام مسماة، يحمل كل منها إعدادات أو قوائم.
إضافة صفوف وقيم متداخلة
تلحق $rows[] = [...] صفًا كاملًا. وتلحق $arr['key'][] = $value داخل قائمة متداخلة، وتنشئ PHP المصفوفة الداخلية في المرة الأولى، فلا يحتاج تجميع القيم إلى أي تهيئة.
المرور على مصفوفة متعددة الأبعاد
استخدم foreach واحدة لكل مستوى. لقائمة من السجلات، تكفي عادة حلقة واحدة لأنك تقرأ الحقول بالاسم. ولشبكة، تمر الحلقة الداخلية على خلايا كل صف.
بناء جدول HTML من مصفوفة
تتطابق مصفوفة الصفوف مباشرة مع جدول HTML: تصبح مفاتيح الصف الأول العناوين، ويصبح كل صف <tr>. شغّله فيعرض تبويب Page الجدول؛ غيّر قيمة أو أضف صفًا وشغّله مرة أخرى.
صيغة foreach (...): ... endforeach; هي الحلقة نفسها مكتوبة للقوالب، فيبقى HTML مقروءًا.
الحصول على عمود واحد من كل الصفوف
تستخرج array_column() حقلًا واحدًا من كل صف إلى قائمة مسطحة. مرّر وسيطًا ثالثًا لتجعل مفاتيح النتيجة من حقل آخر، فتتحول قائمة السجلات إلى جدول بحث.
ترتيب الصفوف حسب حقل
ترتّب usort() الصفوف بدالة مقارنة. يعيد عامل المركبة الفضائية <=> القيمة -1 أو 0 أو 1، وهذا بالضبط ما تتوقعه usort(). بدّل بين $a و$b للترتيب التنازلي.
تعدّ count($players, COUNT_RECURSIVE) الصفوف الثلاثة مع الحقول الستة داخلها، ولهذا تطبع 9.
خطأ شائع: قراءة مفتاح عميق قد يكون مفقودًا
قراءة $config['cache']['ttl'] حين لا يوجد مفتاح cache تطبع Warning: Undefined array key "cache"، ثم Warning: Trying to access array offset on null للمستوى التالي. يفحص العامل ?? السلسلة كلها مرة واحدة ولا يحذّر أبدًا، لذا فهو الطريقة الآمنة لقراءة القيم المتداخلة الاختيارية.
الأسئلة الشائعة
كيف أصل إلى قيمة في مصفوفة متعددة الأبعاد في PHP؟
أضف زوج أقواس لكل مستوى: $matrix[1][0] هي الصف 1، العمود 0، و$users[0]['email'] هو بريد المستخدم الأول. كل قوس يقرأ من المصفوفة التي أعادها القوس الذي قبله.
كيف أمر على مصفوفة متعددة الأبعاد في PHP؟
ضع foreach واحدة لكل مستوى: foreach ($rows as $row) { foreach ($row as $key => $value) { ... } }. ولمصفوفة من السجلات تحتاج عادة إلى حلقة واحدة وتقرأ الحقول بالاسم: $row['name'].
كيف أضيف عنصرًا إلى مصفوفة متعددة الأبعاد؟
ألحق صفًا كاملًا بـ $rows[] = ['name' => 'Linus', 'age' => 54];، أو ألحق داخل مصفوفة متداخلة بـ $groups['admins'][] = 'Grace';. تنشئ PHP المصفوفة الداخلية إذا لم يكن المفتاح موجودًا بعد.
كيف أنشئ مصفوفة ثنائية الأبعاد مملوءة بالأصفار في PHP؟
ادمج استدعاءين لـ array_fill(): تعطي $grid = array_fill(0, 3, array_fill(0, 4, 0)); ثلاثة صفوف في كل منها أربعة أصفار. كل صف نسخة مستقلة، لذا تغيّر $grid[0][0] = 5; الصف الأول فقط.