التكرار باستخدام الحلقات المتداخلة
جزء من قسم المنطق وتدفق التنفيذ في رحلة PHP على Coddy. الدرس 30 من 68.
عند العمل مع مصفوفات ثنائية الأبعاد، غالبًا ما تحتاج إلى معالجة كل عنصر على حدة، وهذا يتطلب زيارة كل row ثم كل عمود داخل ذلك الصف. وهنا تصبح nested loops ضرورية. تستخدم حلقة واحدة داخل أخرى لاجتياز بنية grid بأكملها بطريقة منهجية.
تتكرر الحلقة الخارجية عبر كل row من 2D array، بينما تعالج الحلقة الداخلية كل عنصر ضمن row الحالية. إليك كيفية عمل ذلك باستخدام حلقة foreach:
<?php
$schedule = [
["Meeting", "Lunch", "Presentation"],
["Training", "Review", "Planning"],
["Workshop", "Break", "Demo"]
];
foreach ($schedule as $day) {
foreach ($day as $appointment) {
echo $appointment . "\n";
}
}
?>يمكنك أيضًا استخدام حلقات for التقليدية عندما تحتاج إلى مزيد من التحكم في الفهارس. يتيح لك هذا الأسلوب الوصول إلى موضعي الصف والعمود معًا:
<?php
for ($row = 0; $row < count($schedule); $row++) {
for ($col = 0; $col < count($schedule[$row]); $col++) {
echo "Day " . ($row + 1) . ", Time " . ($col + 1) . ": " . $schedule[$row][$col] . "\n";
}
}
?>يُعد نمط الحلقة المتداخلة هذا أساسيًا لمعالجة المصفوفات ثنائية الأبعاد بالكامل، سواء كنت تعرض البيانات أو تُجري العمليات الحسابية أو تبحث عن قيم محددة عبر بنية grid بأكملها.
التحدي
سهلستتلقى input واحدًا: مصفوفة ثنائية الأبعاد تمثل ترتيب seating في فصل دراسي بتنسيق JSON. تمثل كل مصفوفة داخلية row من seats، ويحتوي كل عنصر على اسم طالب أو empty string للمقاعد الشاغرة. Read input، وحوّل سلسلة JSON إلى 2D array، واستخدم nested loops من أجل iterate عبر ترتيب seating بالكامل، واطبع اسم كل طالب مع موضعه بالتنسيق: Row X, Seat Y: Name
تخطَّ seats الشاغرة (empty strings) واطبع المعلومات الخاصة بالمقاعد المشغولة فقط. يجب ترقيم rows وseats starting من 1 (وليس 0).
تنسيق input: سطر واحد يحتوي على مصفوفة JSON تمثل ترتيب seating (مثال: [["Alice","Bob",""],["","Charlie","Diana"],["Eve","","Frank"]])
المخرجات المتوقعة: طباعة كل seat مشغول في سطر منفصل بالتنسيق Row X, Seat Y: Name، حيث إن X هو number الـrow وY هو number الـseat (وكلاهما starting من 1)
جرّب بنفسك
<?php
// اقرأ إدخال JSON
$input = trim(fgets(STDIN));
// حوّل سلسلة JSON إلى مصفوفة ثنائية الأبعاد
$seating = (array)json_decode($input, true);
// TODO: اكتب الكود الخاص بك أدناه
// استخدم حلقات متداخلة للتكرار عبر الصفوف والمقاعد
// تذكر تخطي المقاعد الفارغة وترقيم الصفوف/المقاعد بدءًا من 1
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
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'مراجعة: ترتيب لوحة المتصدرينتدرّب بنفسك: مترجم PHP عبر الإنترنت