1.3الحلقات : for وwhile وforeach
الأساسي في 30 ثانية
- foreach = حلقة اليومي : foreach ($tab as $valeur) أو as $cle => $valeur — تجوال دون تدبير مؤشر.
- for = عدّاد، وwhile = شرط : فـ for حين يكون العدد معلوما، وwhile ما دام شرط صحيحا (وdo...while مرة على الأقل).
- break تخرج وcontinue تتجاوز : ويجب أن تنتهي كل حلقة — وحذار الحلقات اللانهائية.
حالة مستمرة — رياد يعرض فهرسه في قسنطينة
على رياد عرض فهرس موقعه التعريفي : قائمة خدمات مخزنة في جدول. فكتب أولا حلقة for بمؤشر يدوي — وعرض عنصرا زائدا بسبب خطأ حدّ. فانتقل إلى foreach : فظهرت كل خدمة دون تدبير مؤشر، مع htmlspecialchars للتهريب. وأضاف break لإيقاف البحث فور العثور على الخدمة، وعدّاد for لترقيم الصفحات. فظهر الفهرس كاملا دون تجاوز.
تتمة الحالة 1.1-1.2 — ينتقل رياد من القرارات إلى التكرار.
1. for وwhile وdo...while
تكرر الحلقات (boucles) معالجة. فـ for : حين نعرف عدد التكرارات (أو نجول بعدّاد) — for ($i = 0; $i < 10; $i++) { … }. وwhile : ما دام شرط صحيحا (عدد مجهول). وdo...while : تنفّذ مرة على الأقل (الاختبار في النهاية). وحذار : فـ الحلقة اللانهائية (شرط لا يصير خاطئا أبدا، أو زيادة منسية) تحجب السكربت.
يرقّم رياد صفحاته بـ for محدود ويتحقق من تقدم عدّاده : فلا حلقة لانهائية تحجب عرض الفهرس.
2. foreach وbreak/continue
وحلقة PHP المفتاح هي foreach : لتجوال جدول — foreach ($tab as $valeur) (كل قيمة) أو foreach ($tab as $cle => $valeur) (أزواج مفتاح ← قيمة). حاضرة في كل موضع : عرض القوائم ومعالجة نتائج القاعدة. وتخرج break من الحلقة فورا ؛ وتتجاوز continue إلى التكرار التالي. وفي القوالب : الصيغة البديلة foreach (…): … endforeach;.
يجول رياد خدماته بـ foreach، ويهرّب كل اسم بـ htmlspecialchars، ويوقف البحث بـ break فور العثور على الخدمة.
🔎 مثال ملموس — 🔎 مثال ملموس — تجوال مجموعة
الحالة الغالبة في PHP، كما فعل رياد لفهرسه.
$produits = ['pomme', 'banane', 'cerise'];
foreach ($produits as $produit) {
echo htmlspecialchars($produit) . ' ';
}
// ترابطي :
foreach ($config as $cle => $valeur) {
echo $cle . ' : ' . $valeur . ' ';
}
القراءة : يُعالَج كل عنصر دون تدبير مؤشر — وصيغة as $cle => $valeur للترابطيات.
الدرس : هرّب المعطيات المعروضة (htmlspecialchars) — منعكس أمن منذ الحلقات.
مفردات القسم
- الحلقة
- تكرر معالجة بدلا من تكرار الشيفرة ؛ ولا غنى عنها لتناول المجموعات أو تكرار فعل.
مثال بسيط: عرض فهرس رياد، مكررا لكل عنصر.
ما ليس كذلك: نسخ كتلة العرض نفسها عشر مرات.
رد فعل: متى تكررت معالجة، فحلقة.
- for
- حلقة بعدّاد، حين نعرف عدد التكرارات : for ($i = 0; $i < 10; $i++) { ... } (تهيئة ؛ شرط ؛ زيادة).
مثال بسيط: ترقيم صفحات فهرس رياد.
ما ليس كذلك: تجوال جدول بمؤشر يدوي وخطأ حدّ.
رد فعل: for = عدّاد مفيد وحدود متحقق منها.
- while / do...while
- فـ while : تكرر ما دام شرط صحيحا (عدد مجهول). وdo...while : تنفّذ مرة على الأقل (الاختبار في النهاية).
مثال بسيط: رياد يعيد قراءة السطور ما بقي منها.
ما ليس كذلك: while بشرط لا يتغير أبدا (لانهائية).
رد فعل: تأكد أن الشرط سيصير خاطئا في النهاية.
- foreach
- حلقة لتجوال جدول (الأكثر استعمالا) : foreach ($tab as $valeur) (كل قيمة) أو foreach ($tab as $cle => $valeur) (أزواج مفتاح ← قيمة).
مثال بسيط: الخدمات كما عرضها رياد واحدة واحدة.
ما ليس كذلك: for + $tab[$i] بخطر التجاوز.
رد فعل: جدول يُجال = foreach، وبالمفاتيح عند الحاجة.
- break / continue
- تخرج break من الحلقة فورا. وتتجاوز continue إلى التكرار التالي. وحذار الحلقات اللانهائية (شرط لا يصير خاطئا أبدا).
مثال بسيط: break رياد فور العثور على الخدمة.
ما ليس كذلك: تجوال 500 سطر والهدف في الثالث.
رد فعل: break للإيقاف وcontinue للتجاوز.
في التطبيق — تطبيقيا — كرر وجُل بالحلقات
- اكتب حلقة for (مثلا عرض الأعداد من 1 إلى 10) وحلقة while (كرر ما دام شرط صحيحا).
- جُل جدولا بـ foreach : `foreach ($produits as $produit) { ... }`، ثم بمفتاح ← قيمة على جدول ترابطي.
- استعمل break (اخرج فور العثور على عنصر) وcontinue (تجاوز بعض العناصر) في حلقة.
- تحقق أن لا حلقة لانهائية (فالشرط يصير خاطئا في النهاية) ولاحظ الصيغة البديلة `foreach (...): ... endforeach;` للقوالب.
نص جاهز للنطق — اقترح foreach في مراجعة الشيفرة (30 ث)
« أقترح تمرير حلقة for هذه إلى foreach : نجول جدولا فلا حاجة لمؤشر يدوي — ونلغي خطر خطأ الحدّ. ونضيف htmlspecialchars للعرض، ما دمنا نجول معطيات معروضة. »
يُقال في مراجعة الشيفرة ؛ واعرض قبل/بعد على الحلقة الحقيقية.
نموذج نسخ ولصق — فهرس معروض بـ foreach (مهرَّب)
$prestation) {
echo ($i + 1) . '. ' . htmlspecialchars($prestation) . "\n";
}
$recherche = 'Boutique';
foreach ($prestations as $prestation) {
if ($prestation === $recherche) {
echo 'Trouvee : ' . htmlspecialchars($prestation);
break;
}
}
فهرس في قسنطينة
كما فعل رياد : foreach على الخدمات ورقم ترتيب محسوب وhtmlspecialchars منهجي — فيظهر الفهرس كاملا وآمنا.
بحث مع إيقاف
break فور العثور على العنصر : لا فائدة من تجوال بقية الجدول وقد حُدد الهدف.
صفحات مرقمة
for محدود للترقيم أو التكرار N مرة — فالعدّاد علة وجود for، وليس التجوال.
قائمة في قالب
في HTML تُقرأ صيغة foreach (...): ... endforeach; أفضل ممتزجة بالوسوم — الحلقة نفسها بصيغة ملائمة.
✓ ممارسات جيدة
- استعمل foreach لتجوال جدول (أبسط من for + مؤشر).
- احجز for للحالات التي يكون فيها العدّاد/المؤشر مفيدا حقا.
- تحقق أن شرط while/for سيصير خاطئا في النهاية.
✗ أخطاء شائعة
- إنشاء حلقة لانهائية (زيادة منسية أو شرط مكتوب خطأ).
- تجوال جدول بـ for + مؤشر حين تكفي foreach.
- عرض معطيات غير مهرّبة في حلقة (XSS).
النقاط الأساسية
- تكرر الحلقات معالجة : `for` (بعدّاد وعدد معلوم) و`while` (ما دام شرط صحيحا وعدد مجهول) و`do...while` (مرة على الأقل).
- وforeach هي حلقة PHP المفتاح : لتجوال جدول — `foreach ($tab as $valeur)` أو `foreach ($tab as $cle => $valeur)`. حاضرة في كل موضع (عرض القوائم ومعالجة النتائج).
- تخرج `break` من الحلقة، وتتجاوز `continue` إلى التكرار التالي. وحذار الحلقات اللانهائية (شرط لا يصير خاطئا أبدا ← سكربت محجوب).
- الصيغة البديلة `foreach (...): ... endforeach;` مفضّلة في قوالب HTML. وتتناول الحلقات مجموعات البيانات — في قلب تطبيقات الويب.
تحدي 48 ساعة — طبّق غدا
حوّل حلقة for + مؤشر تجول جدولا إلى foreach (النموذج أعلاه)، وأضف htmlspecialchars للعرض وbreak على بحث. وقارن قبل/بعد محليا. تكفي 20 دقيقة.
- أختار for أو while أو foreach حسب الحالة — وforeach للجداول.
- أستعمل break/continue في موضعهما وتنتهي حلقاتي.
- أهرّب المعطيات المعروضة في حلقاتي.
أسئلة شائعة
متى تستعمل for أو while أو foreach — وكيف تختار الحلقة الصحيحة ؟
فـ foreach : لتجوال مجموعة (الحالة الأكثر شيوعا في PHP) — تدبّر التكرار تلقائيا، فأبسط وأسلم من for. وصيغتان : `as $valeur` و`as $cle => $valeur` (للترابطيات). وfor : حين تحتاج عدّادا أو عددا دقيقا أو خطوة خاصة — أما لمجرد تجوال جدول فـ foreach أفضل. وwhile : حين تتوقف النهاية على شرط ديناميكي دون معرفة العدد مسبقا — مع التأكد أنها ستصير خاطئة في النهاية. وفي ويب PHP تسيطر foreach.
لماذا foreach محورية جدا في PHP، وكيف تستعملها بفعالية ؟
فالتطوير الويب بـ PHP يقوم largely على تناول الجداول : نتائج الاستعلامات ومعطيات الاستمارات والإعدادات — وforeach الأداة المثلى : بسيطة وآمنة (لا مؤشر ولا حلقة لانهائية) ومقروءة. وبفعالية : اختر الصيغة الصحيحة (`as $valeur` أو `as $cle => $valeur`)، واعرض بـ `htmlspecialchars`، واستعمل الصيغة البديلة في القوالب، واجمع مع break/continue، واعرف array_map/filter/reduce (في 1.5) للتحويلات.
ما حلقة PHP المفتاح لتجوال جدول ؟