هياكل الحلقات
تتفوق أجهزة الكمبيوتر في الأعمال المتكررة. تتيح لك الحلقات تكرار عملية ما مئات أو آلاف المرات باستخدام بضعة أسطر فقط من التعليمات البرمجية — مثل إنشاء الجداول، والتصفح المتكرر لقوائم المستخدمين، وحساب الإجماليات — كل ذلك دون عناء.
1. حلقة while
يتم التكرار طالما أن الشرط هو true. التحقق أولاً، ثم التنفيذ لاحقًا.
<?php
$i = 1;
while ($i <= 5) {
echo "Round {$i}<br>";
$i++;
}
// Outputs rounds 1 through 5
?>
مخطط تدفق:
Initialize → [Check condition] → true → Execute loop body → Update variable → Go back to check
↓ false
Exit
true، فستحدث حلقة لا نهائية وسيتوقف برنامجك عن العمل. قبل كتابة كل while، اسأل نفسك: هل يوجد كود داخل الحلقة سيجعل الحالة في النهاية false؟
2. حلقة do...while
الفرق الوحيد عن while هو: التنفيذ مرة واحدة أولاً، ثم التحقق. وهذا يضمن تشغيل نص الحلقة مرة واحدة على الأقل.
<?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
for ($i = 1; $i <= 5; $i++) {
echo "Round {$i}<br>";
}
// Outputs 1 through 5
?>
ثلاثة أجزاء:
for (initialization; condition; action-after-each-iteration) {
// loop body
}
▶ مثال: جدول الضرب باستخدام «for»
<?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
// 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
// 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
$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 المتداخلة |
foreach الأداة الأساسية (ستقوم بتصفح المصفوفات باستمرار). ويأتي بعده for للحلقات المحددة العدد. ويُستخدم while أحيانًا عند قراءة الملفات أو مجموعات نتائج قواعد البيانات. أما do...while فلا يُستخدم أبدًا تقريبًا.
❓ أسئلة شائعة
$i++ و$i += 2 في حلقة for؟$i++ تزيد بمقدار 1 في كل مرة. $i += 2 تزيد بمقدار 2 (حجم الخطوة 2). استخدم الخيار الأخير لإخراج الأعداد الفردية أو الزوجية فقط.foreach ($arr as $val) على نسخة — لذا فإن تعديل $val لا يؤثر على المصفوفة الأصلية. أما إذا قمت بإضافة & إلى مقدمة $val (مرجع)، فإن التعديلات تؤثر على المصفوفة الأصلية. سنناقش هذا بالتفصيل في الدرس 12 (الوظائف المتقدمة).📖 ملخص
whileيتحقق أولاً، ثم ينفذ لاحقًا — قد لا يتم تنفيذه مطلقًا إذا كان الشرط غير صحيحdo...whileيُنفَّذ أولاً، ثم يتم فحصه لاحقًا — يُنفَّذ دائمًا مرة واحدة على الأقلforتجمع بين التهيئة، وتحديد الشرط، وتحديث التكرار في عملية واحدة — وهي الأنسب للحلقات ذات العدد الثابتforeachهي الحلقة الأكثر استخدامًا في لغة PHP — يمكن تصفح المصفوفات باستخدام$arr as $valأو$arr as $key => $valbreakيخرج من الحلقة؛continueيتخطى التكرار الحالي- تساعد الصيغة البديلة (
for (): ... endfor;/foreach (): ... endforeach;) في الحفاظ على نظافة عناصر HTML المدمجة
📝 تمارين
- استخدم حلقة for لإخراج جميع الأعداد الزوجية من 1 إلى 100 (تلميح: حجم الخطوة هو 2، أو
% 2 == 0). - أنشئ مصفوفة مرتبطة تحتوي على أسماء وأرقام هواتف 5 أصدقاء، ثم استخدم عبارة «foreach» لعرضها في شكل جدول HTML.
- استخدم الحلقات المتداخلة لطباعة هرم من علامات النجمة: يحتوي الصف 1 على نجمة واحدة، والصف 2 على 3 نجوم، ... والصف 5 على 9 نجوم — مع محاذاة النص إلى الوسط.



