php 101 الحلقات (Loops) في PHP


عبد اللطيف ايمش

سنتطرّق في هذا الدرس إلى مفهوم الحلقات في PHP، التي تسمح لك بتنفيذ تعليمات برمجية مرةً أو أكثر. فعلى سبيل المثال، لو أردت أن أطبع كلمة "hsoub" عشر مرات فعلي عندها أن أكتب الأمر echo مراتٍ عشر، لكن يمكنني عبر استعمال حلقة أن أكتب الأمر echo مرةً واحدةً لطباعة الجملة عشر مرات.

loops-in-php.png.ab2c8b7dc9c2bd9e9b1e899

هنالك أربعة أنواع من الحلقات في PHP  هي:

  • حلقة while
  • حلقة do-while
  • حلقة for
  • حلقة foreach

سنتعلم في هذا الدرس عن أول ثلاث حلقات لأن الرابعة متعلقة بالمصفوفات التي سنتعلمها لاحقًا، لذا سنؤجِّل شرح حلقة foreach إلى درسٍ قادم.

حلقة while

حلقة while هي من أبسط أشكال الحلقات في PHP، إذ تقوم هذه الحلقة بتنفيذ التعليمات البرمجية مرارًا وتكرارًا إلى أن يتحقق الشرط (أي تصبح قيمته FALSE)، ويتم التحقق من قيمة الشرط قبل كل تكرار، فلو تغيرت قيمته أثناء التنفيذ فسيستمر تنفيذ التعليمات الموجودة في الحلقة إلى نهايتها؛ وقد يتحقق شرط حلقة while من البداية (أي تكون قيمته من البداية FALSE)، وبهذا لن تُنفَّذ التعليمات الموجودة فيها أبدًا. الشكل العام للحلقة while  هو:

while (expr) {
  statments
}

خصائص هذا الشرط مماثلة لخصائص شرط عبارة if-else؛ فلطالما كانت قيمة الشرط true أو قيمةً ليست صفرية، فسيستمر تنفيذ الشيفرة مرارًا وتكرارًا. لنلقِ نظرةً على هذا المثال:

<?php

// نعطي قيمةً ابتدائية للمتغير
$initial_value = 0;

// أصغر من 10 هو الشرط الذي سينهي الحلقة
while($initial_value < 10) {
  echo 'hsoub'.'<br>';
  // سنزيد قيمة المتغير بمقدار 1
  $initial_value++;
}

?>

تبدأ قيمة المتغير ‎$initial_value من القيمة 0 وسيستمر تنفيذ الحلقة لطالما كانت قيمة المتغير ‎initial_value$ أصغر من 10؛ تزداد قيمة ‎$initial_value بمقدار 1 في كل تكرار؛ وسيطبع المثال السابق الكلمة "hsoub" عشر مرات، ويُستعمَل الوسم <br> لإدراج سطرٍ جديد في مستندات HTML (لطباعة الكلمات في أسطرٍ مختلفة). تذكر أنَّ النقطة "." تجمع بين سلسلتين نصيتين.

حلقة do-while

هذه الحلقة مشابهة جدًا لحلقة while لكن الاختلاف بينها هو أنَّ هذه الحلقة تتحقق من قيمة الشرط بعد أن تنفِّذ الشيفرة الموجود ضمنها؛ أي أنها تتحقق من الشرط عند تكرار تنفيذ الشيفرة وليس عند تنفيذها لأول مرة. شكلها العام هو:

do {
  statments
} while (expr);

مثالٌ عليها:

<?php

// نعطي قيمةً ابتدائية للمتغير
$initial_value = 0;

// أصغر من 10 هو الشرط الذي سينهي الحلقة
do {
  echo 'hsoub'.'<br>';
  // سنزيد قيمة المتغير بمقدار 1
  $initial_value++;
} while($initial_value < 10);

?>

سيطبع هذا المثال الكلمة "hsoub" عشر مرات أيضًا، لكن الاختلاف يكمن فيما لو كانت القيمة الابتدائية للمتغير ‎$initial_value أكبر أو تساوي 10، ففي هذا الحالة لن تُنفَّذ حلقة while بينما ستُنفَّذ حلقة do-while. أي أنها ستنفَّذ مرةً واحدةً على الأقل. لاحظ وجود الفاصلة المنقوطة بعد while في حلقة do-while.

حلقة for

الشكل العام لحلقة for هو:

for (initialize; condition; operation) {
  statments
}

لنأخذ مثالًا قبل أن نناقش آلية عمل هذه الحلقة:

<?php

// تهيئة المتغير داخل الحلقة
for($initial = 0; $initial <10; $initial++) {
  echo 'hsoub'.'<br>';
}

// تهيئة المتغير خارج الحلقة
$initial_value = 0;
for (; $initial_value < 10; $initial_value++) {
  echo 'hsoub'.'<br>';
}

?>

شاهدنا -في أول نوعين من الحلقات- كيف أننا نهيّئ متغيرًا، ثم علينا التحقق من الشرط في الحلقة كي تُنفَّذ، ثم في النهاية علينا تعديل قيمة المتغير (زيادةً أو نقصانًا). لكننا نجري الخطوات الثلاث السابقة في مكانٍ وحيد في حلقة for. تأخذ الحلقة for ثلاثة وسائط (arguments):

  1.  القيمة الابتدائية (initialize): وهي مماثلة لأول نوعين من الحلقات. يمكننا تهيئة المتغيرات في حلقة for بطريقتين، الأولى داخل الحلقة (بين الأقواس) والأخرى قبل الحلقة. لاحظ طريقة الكتابة في المثال السابق؛ حيث يُفصَل بين كل وسيط والآخر بفاصلة منقوطة؛ وإذا كنت تُهيّئ القيمة خارج الحلقة، فلا تنسَ أن تضع الفاصلة المنقوطة حتى ولو كانت القيمة فارغة.
  2. الشرط (condition): وهو يقارن بين قيمة المتغير الذي تمت تهيئته والقيمة المعطية.
  3. العملية (operation): وهي التي ستعدِّل في قيمة المتغير بعد نهاية تنفيذ كل تكرار للحلقة.

أمثلة إضافية

لا يكفي الشكل العام للأوامر والتعليمات لتعلم لغة البرمجة وفهمها فهمًا تامًا؛ لنحاول الآن استيعاب هذه الأمثلة:

<?php

// طباعة الأرقام من 10 إلى 0
for ($number=10; $number >= 0; $number--) {
  echo $number.'<br>';
}

?>
<?php

// زيادة الرقم بمقدار 2 في كل دورة
for ($number=0; $number < 10; $number+=2) {
  echo $number.'<br>';
}

?>

نجد -في المثال أعلاه- المعامل "‎+=‎" الذي يُضيف القيمة على الجانب الأيمن إلى قيمة المتغير على الجانب الأيسر؛ يمكنك أيضًا استعمال هذه المعاملات:

  • "‎*=‎": الضرب، مثال ‎$number *= 2‎
  • "‎-=‎": الطرح
  • "‎/=‎": القسمة
  • "‎%=‎": باقي القسمة
  • "‎^=‎": القوة (أو الأس)

سنكتب الآن برنامجًا لطباعة مضاعفات الرقم 5 بين العددين 1 و 100؛ تذكَّر أن المعامل % يُعيد باقي القسمة.

<?php

for ($number=1; $number < 100; $number++) {
  if ($number % 5 == 0) {
    echo $number.'<br>';
  }
}

?>

الشكل البديل لبنى التحكم

تدعم PHP شكلًا بديلًا لأقواس بنى التحكم التي هي if، و while، و for، و foreach، و switch؛ وطريقة استعمال الشكل البديل هي وضع نقطتين رأسيتين (:) بدلًا من قوس البداية، واستبدال قوس النهاية بالكلمات "endif;‎"، أو "endwhile;‎"، أو "‎endfor;‎"، أو "endforeach;‎" (سنناقش تلك الحلقة في درسٍ لاحق)، أو "endswitch;‎" على التوالي وبالترتيب.

<?php if ($a == 5): ?>
  A is equal to 5
<?php endif; ?>

قسم HTML في المثال السابق (A is equal to 5) موجودٌ ضمن جملة if شرطية مكتوبة بالشكل البديل، لاحظ أن تمييز بداية ونهاية بنى التحكم أسهل عند دمج HTML مع PHP. ستظهر جملة "A is equal to 5" فقط إن كانت قيمة المتغير ‎$a مساوية للرقم 5.

يمكن تطبيق الشكل البديل على عبارات else و elseif أيضًا. هذا مثالٌ عنها بالشكل البديل:

<?php

if ($a == 5):
  echo "a equals 5";
  echo "...";
elseif ($a == 6):
  echo "a equals 6";
  echo "!!!";
else:
  echo "a is neither 5 nor 6";
endif;

?>

تمرين

اكتب برنامجًا فيه حلقتين متداخلتين لطباعة جدول الضرب للأعداد من 1 إلى 9؛ حيث يكون ناتج خرجه هو:

1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81

حاول أن تشغل السكربت السابق من سطر الأوامر (استعمل ‎\t لإدراج مسافة جدولة [tab]، و ‎\n لإدراج سطر جديد).

المصادر



1 شخص أعجب بهذا


تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن