هياكل الحلقات

تتفوق أجهزة الكمبيوتر في الأعمال المتكررة. تتيح لك الحلقات تكرار عملية ما مئات أو آلاف المرات باستخدام بضعة أسطر فقط من التعليمات البرمجية — مثل إنشاء الجداول، والتصفح المتكرر لقوائم المستخدمين، وحساب الإجماليات — كل ذلك دون عناء.

1. حلقة while

يتم التكرار طالما أن الشرط هو true. التحقق أولاً، ثم التنفيذ لاحقًا.

PHP
<?php
$i = 1;
while ($i <= 5) {
    echo "Round {$i}<br>";
    $i++;
}
// Outputs rounds 1 through 5
?>

مخطط تدفق:

TEXT
Initialize → [Check condition] → true → Execute loop body → Update variable → Go back to check
                       ↓ false
                      Exit
⚠️ تحذير: إذا كانت الحالة دائمًا true، فستحدث حلقة لا نهائية وسيتوقف برنامجك عن العمل. قبل كتابة كل while، اسأل نفسك: هل يوجد كود داخل الحلقة سيجعل الحالة في النهاية false؟


2. حلقة do...while

الفرق الوحيد عن while هو: التنفيذ مرة واحدة أولاً، ثم التحقق. وهذا يضمن تشغيل نص الحلقة مرة واحدة على الأقل.

PHP
<?php
$i = 10;
do {
    echo "Executed!<br>";
    $i++;
} while ($i < 5);
// Even though the condition is false from the start, it still outputs "Executed!" once.
?>
while do...while
التحقق من التوقيت التحقق أولاً، ثم التنفيذ التنفيذ أولاً، ثم التحقق
يتم تنفيذه مرة واحدة على الأقل؟ ❌ قد لا يتم تنفيذه أبدًا ✅ دائمًا مرة واحدة على الأقل
تواتر الاستخدام شائع نادر

3. حلقة for

يجمع for بين التهيئة والشروط وتحديث التكرار في مكان واحد — وهي الحلقة الأكثر استخدامًا:

PHP
<?php
for ($i = 1; $i <= 5; $i++) {
    echo "Round {$i}<br>";
}
// Outputs 1 through 5
?>

ثلاثة أجزاء:

PHP
for (initialization; condition; action-after-each-iteration) {
    // loop body
}

▶ مثال: جدول الضرب باستخدام «for»

PHP
<?php
echo "<table border='1'>";
for ($i = 1; $i <= 9; $i++) {
    echo "<tr>";
    for ($j = 1; $j <= $i; $j++) {
        echo "<td>{$j}×{$i}=" . ($i * $j) . "</td>";
    }
    echo "</tr>";
}
echo "</table>";
?>
▶ جرّب الكود

4. حلقة foreach

foreach هي حلقة التكرار الأكثر تميزًا في لغة PHP — وقد صُممت خصيصًا لتصفح المصفوفات. وبنيتها النحوية واضحة للغاية لدرجة أنها تكاد تسبب الإدمان:

PHP
<?php
// Loop through an indexed array (value only)
$fruits = ["apple", "banana", "orange"];
foreach ($fruits as $fruit) {
    echo "{$fruit}<br>";
}

// Loop through an associative array (key + value)
$user = [
    "name" => "John",
    "age" => 25,
    "city" => "New York"
];
foreach ($user as $key => $value) {
    echo "{$key}: {$value}<br>";
}
// name: John
// age: 25
// city: New York
?>
💡 نصيحة: foreach هي الحلقة الأكثر استخدامًا في لغة PHP. احفظ نمطين: foreach ($arr as $val) للقيمة فقط؛ وforeach ($arr as $key => $val) عندما تحتاج إلى كل من المفتاح والقيمة.


5. break و continue

الكلمة المفتاحية الإجراء
break يخرج فورًا من الحلقة بأكملها — لا مزيد من التكرارات
continue يتخطى بقية التكرار الحالي وينتقل إلى التكرار التالي

▶ مثال: break و continue

PHP
<?php
// break: stop at 5
for ($i = 1; $i <= 10; $i++) {
    if ($i == 5) {
        break;  // Exit the loop
    }
    echo $i . " ";
}
// Output: 1 2 3 4

// continue: skip 5
for ($i = 1; $i <= 10; $i++) {
    if ($i == 5) {
        continue;  // Skip this iteration
    }
    echo $i . " ";
}
// Output: 1 2 3 4 6 7 8 9 10
?>
▶ جرّب الكود
💡 نصيحة: break 2; تخرج من مستويين من الحلقات المتداخلة، وcontinue 2; تتخطى التكرار الحالي للحلقة الخارجية. ويشير الرقم الموجود بعد break/continue إلى عدد مستويات التداخل التي سيؤثر عليها الأمر.


6. دمج الحلقات مع HTML

تجعل صيغة البرمجة البديلة الحلقات أكثر أناقةً بكثير داخل قوالب HTML:

▶ مثال: إنشاء جدول HTML باستخدام foreach

PHP
<?php
$students = [
    ["name" => "Alice", "score" => 92],
    ["name" => "Bob", "score" => 85],
    ["name" => "Charlie", "score" => 78],
    ["name" => "Diana", "score" => 95],
];
?>

<table border="1">
    <tr>
        <th>Name</th>
        <th>Score</th>
        <th>Grade</th>
    </tr>
    <?php foreach ($students as $s): ?>
    <tr>
        <td><?= $s['name'] ?></td>
        <td><?= $s['score'] ?></td>
        <td>
            <?php if ($s['score'] >= 90): ?>
                🌟 Excellent
            <?php elseif ($s['score'] >= 80): ?>
                👍 Good
            <?php else: ?>
                📚 Keep Trying
            <?php endif; ?>
        </td>
    </tr>
    <?php endforeach; ?>
</table>
▶ جرّب الكود

يوضح هذا المثال السحر الأساسي لـ PHP — تحويل بيانات المصفوفة إلى جدول HTML كامل باستخدام بضع أسطر فقط.


7. اختيار الحلقة المناسبة

السيناريو الدورة الموصى بها
تصفح المصفوفة foreach
عدد ثابت من التكرارات (على سبيل المثال، من 1 إلى 10) for
عدد التكرارات غير معروف، لكن الشرط معروف while
يجب تنفيذه مرة واحدة على الأقل do...while (نادرًا ما يُستخدم)
تجول المصفوفات/الجداول ثنائية الأبعاد المتداخلة for المتداخلة أو foreach المتداخلة
💡 نصيحة: في لغة PHP، يُعد foreach الأداة الأساسية (ستقوم بتصفح المصفوفات باستمرار). ويأتي بعده for للحلقات المحددة العدد. ويُستخدم while أحيانًا عند قراءة الملفات أو مجموعات نتائج قواعد البيانات. أما do...while فلا يُستخدم أبدًا تقريبًا.

❓ أسئلة شائعة

س ما الفرق بين $i++ و$i += 2 في حلقة for؟
ج $i++ تزيد بمقدار 1 في كل مرة. $i += 2 تزيد بمقدار 2 (حجم الخطوة 2). استخدم الخيار الأخير لإخراج الأعداد الفردية أو الزوجية فقط.
س متى يجب استخدام foreach مقابل for؟
ج تُستخدم foreach فقط مع المصفوفات والكائنات — حيث إن صيغتها أبسط. استخدم for عندما تحتاج إلى تحكم دقيق في المؤشر وحجم الخطوة في حلقة العد.
س ماذا يحدث إذا قمت بتعديل المصفوفة داخل حلقة foreach؟
ج بشكل افتراضي، تعمل foreach ($arr as $val) على نسخة — لذا فإن تعديل $val لا يؤثر على المصفوفة الأصلية. أما إذا قمت بإضافة & إلى مقدمة $val (مرجع)، فإن التعديلات تؤثر على المصفوفة الأصلية. سنناقش هذا بالتفصيل في الدرس 12 (الوظائف المتقدمة).

📖 ملخص

📝 تمارين

  1. استخدم حلقة for لإخراج جميع الأعداد الزوجية من 1 إلى 100 (تلميح: حجم الخطوة هو 2، أو % 2 == 0).
  2. أنشئ مصفوفة مرتبطة تحتوي على أسماء وأرقام هواتف 5 أصدقاء، ثم استخدم عبارة «foreach» لعرضها في شكل جدول HTML.
  3. استخدم الحلقات المتداخلة لطباعة هرم من علامات النجمة: يحتوي الصف 1 على نجمة واحدة، والصف 2 على 3 نجوم، ... والصف 5 على 9 نجوم — مع محاذاة النص إلى الوسط.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%