1.3 · الحلقات : for وwhile وforeach

المستوى 1 · أساسيات اللغة

1.3الحلقات : for وwhile وforeach

الهدف: تكرار المعالجات وتجوال المجموعات بـ for وwhile وخصوصا foreach (الأكثر استعمالا)، مع التحكم في التدفق بـ break/continue.
الوقت المقدّر: 10 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 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 فور العثور على الخدمة.

خطأ شائع في الفهم: « تكفي for + مؤشر لتجوال جدول » أو « العرض في حلقة لا يحتاج تهريبا ». لا. فتجوال جدول بـ for + مؤشر يعيد أخطاء الحدود التي تلغيها foreach : فـ foreach أبسط وأسلم. وكل معطى معروض في حلقة يجب تهريبه (htmlspecialchars) — فحلقة تعرض عشرة أسماء غير مهرّبة هي عشر ثغرات XSS بدلا من واحدة.
الحلقات تسيطر foreach في PHP for عدّاد وعددتكرارات معلومwhile / do...while ما دامشرط (عدد مجهول)foreach تجوال جدول(الأكثر استعمالا)
تسيطر foreach في PHP
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) عُدّ : يستعمل رياد for لترقيم الصفحات (حدود معلومة وزيادة متحقق منها). 2) جُل : يعرض كل خدمة بـ foreach دون مؤشر يدوي — وانتهى العنصر الزائد. 3) تحكّم : break لإيقاف البحث وcontinue للتجاوز وhtmlspecialchars عند كل عرض. الدرس : foreach للمجموعات وfor للعدّادات، وكل حلقة تنتهي.

🔎 مثال ملموس — 🔎 مثال ملموس — تجوال مجموعة

الحالة الغالبة في 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 للتجاوز.

في التطبيق — تطبيقيا — كرر وجُل بالحلقات

  1. اكتب حلقة for (مثلا عرض الأعداد من 1 إلى 10) وحلقة while (كرر ما دام شرط صحيحا).
  2. جُل جدولا بـ foreach : `foreach ($produits as $produit) { ... }`، ثم بمفتاح ← قيمة على جدول ترابطي.
  3. استعمل break (اخرج فور العثور على عنصر) وcontinue (تجاوز بعض العناصر) في حلقة.
  4. تحقق أن لا حلقة لانهائية (فالشرط يصير خاطئا في النهاية) ولاحظ الصيغة البديلة `foreach (...): ... endforeach;` للقوالب.
أصبحت تكرر المعالجات وتجول المجموعات بـ for وwhile وخصوصا foreach (الأكثر استعمالا)، متحكما في التدفق بـ break/continue — في قلب معالجة البيانات.

نص جاهز للنطق — اقترح 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 في موضعهما وتنتهي حلقاتي.
  • أهرّب المعطيات المعروضة في حلقاتي.
تقييم ذاتي 1-5 : هل أجول الجداول بـ foreach دون مؤشر يدوي ؟هل تعرض حلقاتي معطيات مهرّبة ؟

أسئلة شائعة

متى تستعمل 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 المفتاح لتجوال جدول ؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 1أسئلة جديدة وأصعب للتحقق من مكتسباتك