آموزش حلقه‌ها در PHP و ترفندها

برای اجرای چندباره کدهای تکراری از حلقه‌ها در برنامه‌نویسی استفاده می‌شود. اگر بخواهید درون یک آرایه حرکت کنید یا یک جدول از اطلاعات خود به کاربر نمایش دهید، بهتر است با حلقه‌ها کار کنید. در این مقاله با انواع حلقه در PHP آشنا شده و ترفندهای جالبی خواهیم آموخت.

فرض کنید یک آرایه با تعدادی عدد درون آن دارید و می‌خواهید مجموع آن اعداد را محاسبه کنید. اگر تعداد عناصر مشخص باشد، شاید بتوان با نوشتن چند خط کد، تک به تک اعضا را با هم جمع نمود. اما اگر تعداد نامشخص بود چه؟

یا فرض کنید که نام تمام کاربران سایت را از پایگاه داده استخراج کرده‌اید و می‌خواهید آن‌ها را در یک جدول نمایش دهید. آیا می‌توان برای تک تک کاربران، کدنویسی کرد؟

شاید اگر تعداد اعضای ما مشخص باشد، بتوانیم این کار را انجام دهیم. اما کارمان از پایه غیراصولی و اشتباه است! چرا که اگر تعداد تغییر کند یا بسیار زیاد باشد، دیگر روش قبلی جواب نخواهد داد.

به کمک حلقه‌ها در زبان‌های برنامه نویسی می‌توانیم یک قطعه کد را بارها و بارها اجرا کنیم. در حقیقت هر جایی که بخواهیم یک قطعه کد را تکرار کنیم، از حلقه‌ها (Loops) کمک می‌گیریم.

 

انواع حلقه در PHP

در زبان برنامه‌نویسی PHP چهار نوع حلقه داریم. کار همه حلقه‌ها تکرار یک قطعه کد است. اما برای راحتی کار و استفاده‌های خاص‌تر، چند نوع حلقه به وجود آمده است.

  1. حلقه for
  2. حلقه foreach
  3. حلقه while
  4. حلقه do while

حلقه for مواقعی استفاده می‌شود که تعداد چرخش (دور) حلقه برایمان مهم است. حلقه foreach مشابه for است با این تفاوت که چرخش بر روی عناصر یک آرایه خواهد بود.

چرخش در حلقه while تا زمانی ادامه پیدا می‌کند که یک شرط صحیح برقرار باشد و حلقه do while در اولین دور خود شرط را نادیده می‌گیرد.

دیاگرام کلی حلقه‌ها در زبان‌های برنامه‌نویسی

دیاگرام کلی حلقه‌ها در زبان‌های برنامه‌نویسی

در ادامه به بررسی موردی هر کدام از انواع حلقه PHP خواهیم پرداخت.

حلقه for در PHP

از حلقه for در زبان پی‌اچ‌پی زمانی استفاده می‌شود که تعداد تکرار حلقه مشخص است. مثلاً هنگامی که می‌خواهیم به اندازه یک‌ آرایه، قطعه کد ما اجرا شود یا زمانی که می‌خواهیم کدی را دقیقاً ۱۰ بار اجرا کنیم.

در هر بار تکرار حلقه for یک شرط را چک شده و در صورت برقراری شرط، قطعه کد اجرا می‌شود. ساختار کلی حلقه for از چهار بخش تشکیل شده است:

  1. مقداردهی اولیه (initialization) : مقداردهی متغیرهایی که برای شرط حلقه استفاده می‌کنیم.
  2. شرط (condition) : در صورت برقرار بودن این شرط یا مجموعه شرط‌ها، قطعه کد اجرا می‌شود.
  3. عملیات افزایش (increment) : پس از هر بار اجرای حلقه، مقدار متغیرهای شرط را تغییر می‌دهد.
  4. بدنه حلقه (body) : کدهایی که در هر بار اجرای حلقه for اجرا می‌شود.

ساختار حلقه for در PHP به صورت زیر است:

for ( initialization; condition; increment ){
    // body
}

اجرای حلقه for در PHP

بیایید با یک مثال ساده شروع کنیم. فرض کنید می‌خواهیم اعداد ۱ تا ۵۰ را با هم جمع کرده و در متغیر result قرار دهیم.

برای این که متغیر $result را پس از اتمام حلقه هم داشته باشیم، باید آن را خارج از حلقه تعریف کنیم. پس ابتدا آن را تعریف کرده و مقدار 0 را برایش در نظر می‌گیریم.

حال نوبت حلقه for است. بخش‌های مختلف را به صورت زیر تعریف می‌کنیم:

  • مقداردهی اولیه: متغیر مربوط به اعداد ۱ تا ۵۰ که با i نام‌گذاری می‌کنیم.
  • شرط حلقه: اعداد باید بین ۱ تا ۵۰ باشند.
  • عملیات افزایش: متغیر یکی یکی افزایش پیدا می‌کند.
  • بدنه: عدد با مقدار فعلی result جمع شده و در result قرار می‌گیرد.

کد حلقه for برای جمع اعداد به صورت زیر خواهد شد:

$result = 0;

for ( $i=1; $i <=50; $i++ ){
    $result = $result + $i;
}

به همین سادگی!

در قسمت عملیات افزایش، بنا به نیاز خود، می‌توانیم هر عبارت محاسباتی دیگری نیز بنویسیم!

 

حلقه foreach در PHP

گفتیم که حلقه foreach برای حرکت روی آرایه در PHP کاربرد دارد. عناصر آرایه می‌توانند هر چیزی باشند. فرض کنید یک آرایه شامل چند اسم دارید و می‌خواهید آن‌ها را در یک لیست (تگ li) نمایش دهید.

احتمالاً اولین راه‌حلی که به ذهنتان می‌رسد استفاده از حلقه for و کمک گرفتن از یک متغیر $i است که در بازه 0 تا اندازه آرایه حرکت کرده و در بدنه خود، اسامی را چاپ می‌کند.

راه‌حل شما کاملاً درست و منطقی است! اما استفاده از حلقه for به سادگی و خوانایی کد شما کمک زیادی خواهد کرد.

ساختار حلقه foreach در PHP از سه بخش اصلی تشکیل شده است:

  1. آرایه (array)
  2. متغیر منتسب به هر عنصر آرایه (value)
  3. بدنه حلقه (body)
foreach ( array as value ){
   // body
}

آرایه‌ای از اسم‌های زیر را در نظر بگیرید:

$names = array( "Omid", "Nazanin", "Ehsan", "Mina" );

برای چاپ تک تک اسامی در یک لیست، به صورت زیر عمل می‌کنیم:

echo '<ul>';

foreach ( $names as $name ) {
   echo '<li>' . $name . '</li>';
}

echo '</ul>';

کاری که حلقه foreach در پی‌اچ‌پی می‌کند به این صورت است که ابتدا، اولین عنصر آرایه $names را درون متغیر $name ریخته و قطعه کد بدنه را اجرا می‌کنید.

پس از پایان اجرا، دومین عنصر آرایه را درون متغیر names ریخته و مجدداً کد را اجرا می‌کند. همین روال تا خواندن آخرین عنصر آرایه ادامه پیدا خواهد کرد. نتیجه اجرای حلقه بالا مشابه تصویر زیر خواهد شد:

خروجی نهایی حلقه foreach ساده

خروجی نهایی حلقه foreach ساده

استفاده از حلقه foreach در PHP مثل حرفه‌ای‌ها!

حالا بیایید با هم یک روش حرفه‌ای و ساده برای کار با آرایه‌های انجمنی (Associative Array) بیاموزیم! آرایه‌های انجمنی آرایه‌هایی هستند که هر عنصر آن دارای یک کلید و مقدار خاص است.

اگر بخواهیم در یک حلقه، به هر دو مقدار کلید (key) و مقدار (value) دسترسی داشته باشیم، از این روش استفاده خواهیم کرد.

فرض کنید یک آرایه داریم که درون آن نام و معدل افراد وجود دارد. نام‌های افراد به عنوان کلید و معدل آن‌ها، مقدار هر عنصر است؛ مشابه آرایه زیر:

$all = array( "Elena" => 18.21,
              "Ehsan" => 15.73,
              "Mina"  => 16.37,
              "Sina"  => 17.66, );

برای نمایش نام و معدل هر نفر در یک لیست، از کد زیر استفاده می‌کنیم.

echo '<ul>';

foreach ( $all as $name => $avg ) {
   echo '<li>' . $name . ' (' .  $avg . ')</li>';
}

echo '</ul>';

در قسمت تعریف متغیر در حلقه foreach، دو متغیر با علامت ارتباط کلید و مقدار تعریف شده است. حالا در هر بار اجرای حلقه، کلید عنصر اول در $name و مقدار آن در $avg قرار می‌گیرد. این روند تا آخرین عنصر درون آرایه $all انجام شده و در نهایت خروجی ما چیزی شبیه عکس زیر خواهد بود.

خروجی استفاده حرفه‌ای از حلقه foreach در PHP

خروجی استفاده از حلقه foreach

آموزش آرایه در PHP و ترفندهای کار با آرایه

آموزش آرایه در PHP و ترفندهای کار با آرایه

 

حلقه while در پی اچ پی

حلقه while زمانی استفاده می‌شود که شرط اجرای حلقه، فقط یک شرط باشد. مثلاً می‌خواهیم تا زمانی که عددی از 1024 کوچک‌تر است، مقدارش را دو برابر کنیم.

برای این کار از قطعه کد زیر استفاده می‌کنیم.

$num = 28;
while( $num < 1024 ){
    $num = $num * 2;
}

روند اجرای کد به صورت زیر است:

  • آیا مقدار $num از 1024 کوچک‌تر است ؟
  • اگر بله آن را دو برابر کن و به ابتدای حلقه برگرد.

پس از 5 بار تکرار حلقه، مقدار num برابر 896 خواهد شد. حلقه برای آخرین بار اجرا شده و مقدار آن برابر 1792 می‌شود. حالا دیگر شرط برقرار نیست و اجرای کد به پایان می‌رسد.

حلقه while در PHP دارای دو بخش است:

  1. شرط حلقه (condition)
  2. بدنه حلقه

در مثالی که گفته شد، درون شرط از یک عدد استفاده کردیم و این مقدار را درون حلقه تغییر می‌دادیم. اما بر اساس نیاز، می‌توانیم از شرط‌ها یا توابع دیگری از خارج حلقه هم کمک بگیریم.

برای مثال، یک تابع داریم که طبق محاسباتی، به ما اجازه دسترسی یا عدم دسترسی به بخشی از سایت را می‌دهد. تابع is_allowed() به ما true یا false برمی‌گرداند.

می‌خواهیم به کمک حلقه while تا زمانی که مجوز دسترسی نداریم (خروجی false است)، منتظر بمانیم. این کار به کمک کد زیر قابل انجام است:

while( ! is_allowed() ){}

البته چون بدنه خالی است، می‌توانیم علامت {} را قرار ندهیم.

این کد فقط مثالی بود تا متوجه شوید حتماً لازم نیست شرط حلقه از بدنه حلقه تغییر کند.

حلقه do while

در حلقه while، ابتدا شرط بررسی می‌شد و اگر شرط برقرار بود، بدنه آن اجرا می‌شد. در do-while ابتدا کد اجرا شده و سپس شرط بررسی می‌شود. اگر شرط برقرار نبود، تکرارهای بعدی انجام نخواهد شد.

در حقیقت زمانی که می‌خواهیم یک قطعه کد حداقل برای یک بار اجرا شده و در صورت برقراری یک شرط، تکرار آن ادامه پیدا کند، از حلقه do while در PHP استفاده می‌کنیم.

فرض کنید می‌خواهیم عدد num را دو برابر کرده و اگر کمتر از 1024 بود، این کار را تکرار کنیم. حلقه زیر دقیقاً همین کار را انجام می‌دهد.

$num = 28;
do{
    $num = $num * 2;
}while( $num < 1024 );

 

آموزش رشته در PHP و توابع کاربردی کار با رشته

آموزش رشته در PHP و توابع کاربردی کار با رشته

 

ترفندهای کار با حلقه در PHP

در کار با حلقه‌ها در PHP می‌توان خلاقیت و ایده‌های مختلفی را اجرایی کرد. خارج از خلاقیت‌هایی که همیشه در برنامه‌نویسی به کار می‌بریم، دو کلمه کلیدی برای عملیات‌های خاص در حلقه‌ها وجود دارند.

زبان PHP هم مانند سایر زبان‌های برنامه‌نویسی، دارای دو دستور زیر است:

  • دستور break
  • دستور continue

در کد زیر، یک حلقه for داریم که اعداد 1 تا 7 را چاپ می‌کند. با در نظر گرفتن این مثال، به توضیح عملکرد این دو دستور می‌پردازیم.

for( $i=1; $i<=7; $i++){
    echo $i . ' ';
}
// Result: 1 2 3 4 5 6 7

 

دستور break

فرض کنید می‌خواهیم وقتی به عدد 5 رسیدیم، اجرای حلقه به‌طور کامل متوقف شود! یعنی اعداد 5 و 6 و 7 چاپ نشوند.

برای این کار از دستور break استفاده می‌کنیم.

for( $i=1; $i<=7; $i++){
   if( $i==5 ) break;
    echo $i . ' ';
}
// Result: 1 2 3 4

 

در مجموع وقتی که می‌خواهیم در حالی که شرط حلقه برقرار است، اجرا آن را متوقف کنیم، از دستور break استفاده می‌کنیم.

 

دستور continue در حلقه PHP

فرض کنید در این حلقه، می‌خواهیم از چاپ عدد 5 جلوگیری کنیم. در حالت قبلی از اجرای حلقه به‌طور کامل جلوگیری شد. اما با اجرای دستور continue فقط اجرای همان حلقه متوقف شده و به تکرار بعدی منتقل می‌شویم.

for( $i=1; $i<=7; $i++){
   if( $i==5 ) continue;
    echo $i . ' ';
}
// Result: 1 2 3 4 6 7

با قطعه کد بالا، با برقرار شدن شرط در خط دوم، اجرای آن دُور از حلقه متوقف شده و به دور $i=6 می‌رویم.

برای دیدن دیاگرام‌های دستورات break و continue می‌توانید به این منبع انگلیسی مراجعه کنید.

 

جمع‌بندی: آموزش حلقه PHP

در این مقاله به آموزش حلقه در PHP پرداختیم. در ابتدا با انواع Loop پی‌اچ‌پی و سپس با ساختار و نحوه استفاده از آن‌ها آشنا شدیم.

فهمیدیم که حلقه for برای تکرار یک قطعه کد به تعداد دفعات مشخص استفاده می‌شود. اگر بخواهیم بر روی عناصر یک آرایه عملیاتی انجام دهیم، از حلقه foreach استفاده می‌کنیم. حلقه while تا زمانی که شرطش برقرار بود، تکرار می‌شد ولی در حلقه do-while حداقل یک‌بار اجرا شده و سپس شرط بررسی می‌شود.

امیدوارم از این آموزش لذت برده باشید. بخش دیدگاه‌های برای سؤالات و نظرات شماست.