
برای اجرای چندباره کدهای تکراری از حلقهها در برنامهنویسی استفاده میشود. اگر بخواهید درون یک آرایه حرکت کنید یا یک جدول از اطلاعات را به کاربر نمایش دهیم، بهتر است با حلقهها کار کنیم. در این آموزش با انواع حلقه در PHP آشنا شده و ترفندهای کار با آن را یاد میگیریم.
فرض کنید یک آرایه با تعدادی عدد درون آن داریم و میخواهیم مجموع آن اعداد را محاسبه کنیم. اگر تعداد عناصر مشخص باشد، شاید بتوان با نوشتن چند خط کد، تک به تک اعضا را با هم جمع نمود. اما اگر تعداد نامشخص بود چه؟
یا فرض کنید که نام تمام کاربران سایت را از پایگاه داده استخراج کردهایم و میخواهیم آنها را در یک جدول نمایش دهیم. آیا میتوان برای تک تک کاربران، کدنویسی کرد؟
شاید اگر تعداد اعضای ما مشخص باشد، بتوانیم این کار را انجام دهیم. اما کارمان از پایه غیراصولی و اشتباه است! چرا که اگر تعداد تغییر کند یا بسیار زیاد باشد، روش قبلی جواب نخواهد داد.
به کمک حلقهها در زبانهای برنامه نویسی میتوانیم یک قطعه کد را بارها و بارها اجرا کنیم. در حقیقت هر جایی که بخواهیم یک قطعه کد را تکرار کنیم، از حلقهها (Loops) کمک میگیریم.
فهرست محتوای آموزش
انواع حلقه در PHP
در زبان برنامهنویسی PHP چهار نوع حلقه داریم. کار همه حلقهها تکرار یک قطعه کد است. اما برای راحتی کار و استفادههای خاصتر، چند نوع حلقه وجود دارد:
- حلقه for
- ساختار foreach
- حلقه while
- ساختار do while
حلقه for مواقعی استفاده میشود که تعداد چرخش (دور) حلقه برایمان مهم است. حلقه foreach مشابه for است با این تفاوت که چرخش بر روی عناصر یک آرایه خواهد بود.
چرخش در حلقه while تا زمانی ادامه پیدا میکند که یک شرط صحیح برقرار باشد و حلقه do while در اولین بار شرط را نادیده میگیرد.
در عکس زیر، یک ساختار کلی برای نحوه اجرای حلقهها را میبینید. در ادامه استفاده از انواع حلقه PHP را با مثال یاد میگیریم.

حلقه for در PHP
از حلقه for در زبان پیاچپی زمانی استفاده میشود که تعداد تکرار حلقه مشخص است. مثلاً هنگامی که میخواهیم قطعه کد ما به تعداد اعضای یک آرایه اجرا شود یا زمانی که میخواهیم کدی را دقیقاً ۱۰ بار اجرا کنیم.
در هر بار تکرار حلقه for یک شرط چک شده و در صورت برقراری شرط، کد اجرا میشود. ساختار کلی حلقه for از چهار بخش تشکیل شده است:
- مقداردهی اولیه (initialization) : مقداردهی متغیرهایی که برای شرط حلقه استفاده میکنیم.
- شرط (condition) : در صورت برقرار بودن این شرط یا مجموعه شرطها، قطعه کد اجرا میشود.
- عملیات افزایش (increment) : پس از هر بار اجرای حلقه، مقدار متغیرهای شرط را تغییر میدهد.
- بدنه حلقه (body) : کدهایی که در هر بار اجرای حلقه for اجرا میشود.
ساختار حلقه for در PHP به صورت زیر است:
for ( initialization; condition; increment ){
// body
}
اجرای حلقه for در PHP
بیایید با یک مثال ساده شروع کنیم. فرض کنید میخواهیم اعداد ۱ تا ۵۰ را با هم جمع کرده و در متغیر result قرار دهیم.
برای این که متغیر $result
را پس از اتمام حلقه هم داشته باشیم، باید آن را خارج از حلقه تعریف کنیم. پس ابتدا آن را تعریف کرده و مقدارش را 0 در نظر میگیریم.
حال نوبت حلقه for است. بخشهای مختلف را به صورت زیر تعریف میکنیم:
- مقداردهی اولیه: متغیر مربوط به اعداد ۱ تا ۵۰ که با i نامگذاری میکنیم.
- شرط حلقه: اعداد باید بین ۱ تا ۵۰ باشند. (اگر با شرطها آشنا نیستید، آموزش شرط در PHP را ببینید.)
- عملیات افزایش: متغیر یکی یکی افزایش پیدا میکند.
- بدنه: عدد با مقدار فعلی result جمع شده و در result قرار میگیرد.
کد حلقه for برای جمع اعداد به صورت زیر خواهد شد:
$result = 0;
for ( $i=1; $i <=50; $i++ ){
$result = $result + $i;
}
به همین سادگی! 🙂 در قسمت عملیات افزایش، میتوانیم هر عبارت محاسباتی دیگری نیز بنویسیم!
حلقه foreach در PHP
گفتم که حلقه foreach برای حرکت روی آرایه در PHP کاربرد دارد. عناصر آرایه میتوانند هر چیزی باشند. فرض کنید یک آرایه شامل چند اسم داریم و میخواهیم آنها را در یک لیست (تگ li) نمایش دهیم.
احتمالاً اولین راهحلی که به ذهنتان میرسد استفاده از حلقه for و کمک گرفتن از یک متغیر $i
است که در بازه 0 تا اندازه آرایه حرکت کرده و در بدنه خود، اسامی را چاپ میکند.
راهحل شما کاملاً درست و منطقی است! اما استفاده از حلقه foreach به سادگی و خوانایی کد شما کمک زیادی میکند. ساختار حلقه foreach در PHP از سه بخش اصلی تشکیل شده است:
- آرایه (array)
- متغیر منتسب به هر عنصر آرایه (value)
- بدنه حلقه (body)
foreach ( array as value ){
// body
}
آرایهای از اسمهای زیر را در نظر بگیرید:
$names = array( "Omid", "Nazanin", "Ehsan", "Mina" );
برای چاپ تک تک اسامی در یک لیست، به صورت زیر عمل میکنیم:
<?php
echo '<ul>';
foreach ( $names as $name ) {
echo '<li>' . $name . '</li>';
}
echo '</ul>';
کاری که حلقه foreach در پیاچپی میکند به این صورت است که ابتدا، اولین عنصر آرایه $names
را درون متغیر $name
ریخته و قطعه کد بدنه را اجرا میکنید.
پس از پایان اجرا، دومین عنصر آرایه را درون متغیر names ریخته و مجدداً کد را اجرا میکند. همین روال تا خواندن آخرین عنصر آرایه ادامه پیدا خواهد کرد. نتیجه اجرای حلقه بالا مشابه تصویر زیر خواهد شد:

استفاده از حلقه foreach در PHP مثل حرفهایها!
حالا بیایید با هم یک روش حرفهای و ساده برای کار با آرایههای انجمنی (Associative Array) بیاموزیم! آرایههای انجمنی آرایههایی هستند که هر عنصر آن دارای یک کلید و مقدار خاص است.
اگر بخواهیم در یک حلقه، به هر دو مقدار کلید (key) و مقدار (value) دسترسی داشته باشیم، از این روش استفاده میکنیم.
فرض کنید یک آرایه داریم که در آن نام و معدل دانشجوها قرار دارد. نامهای افراد به عنوان کلید و معدل آنها، مقدار هر عنصر است؛ مشابه آرایه زیر:
$all = array( "Elena" => 18.21,
"Ehsan" => 15.73,
"Mina" => 16.37,
"Sina" => 17.66, );
برای نمایش نام و معدل هر نفر در یک لیست، از کد زیر استفاده میکنیم:
<?php
echo '<ul>';
foreach ( $all as $name => $avg ) {
echo '<li>' . $name . ' (' . $avg . ')</li>';
}
echo '</ul>';
در قسمت تعریف متغیر در حلقه foreach، دو متغیر با علامت ارتباط کلید و مقدار تعریف شده است. حالا در هر بار اجرای حلقه، کلید عنصر اول در $name
و مقدار آن در $avg
قرار میگیرد. این روند تا آخرین عنصر درون آرایه $all
انجام شده و در نهایت خروجی ما چیزی شبیه عکس زیر خواهد بود.

حلقه while در پی اچ پی
حلقه while زمانی استفاده میشود که میخواهیم بدنه حلقه PHP تا زمانی که یک شرط برقرار است اجرا شود. مثلاً تا زمانی که عددی از 1024 کوچکتر است، مقدارش را دو برابر کنیم؛ یا مثلاً موقع نمایش لیست اعضای سایت، تا زمانی که هنوز کاربری باقی مانده که نمایشش ندادیم، مقدارش را چاپ کنیم.
برای مثال دوبرابر کردن عدد از قطعه کد زیر استفاده میکنیم:
$num = 28;
while( $num < 1024 ){
$num = $num * 2;
}
روند اجرای حلقه while در PHP بهصورت زیر است:
- آیا مقدار
$num
از 1024 کوچکتر است ؟ - اگر بله، آن را دو برابر کن و به ابتدای حلقه برگرد.
- اگر نه، از انتهای حلقه بقیه کدها را اجرا کن.
در این مثال، پس از 5 بار تکرار حلقه، مقدار num برابر 896 خواهد شد. حلقه برای آخرین بار اجرا شده و مقدار آن برابر 1792 میشود. حالا دیگر شرط برقرار نیست و اجرای کد به پایان میرسد.
ساختار حلقه while
حلقه while در PHP دارای دو بخش است:
- شرط حلقه (condition)
- بدنه حلقه
در مثالی که گفته شد، درون شرط از یک عدد استفاده کردیم و این مقدار را درون حلقه تغییر میدادیم. اما بر اساس نیاز، میتوانیم از شرطها یا توابع دیگری از خارج حلقه هم کمک بگیریم.
برای مثال، فرض کنید یک تابع داریم که طبق محاسباتی، به ما اجازه دسترسی یا عدم دسترسی به بخشی از سایت را میدهد. تابع is_allowed()
به ما true یا false برمیگرداند.
در جلسات بعدی آموزش PHP، تابع در PHP را یاد میگیریم. فعلاً بدانید وقتی از این عبارت در کدمان استفاده میکنیم، یک مقدار boolean به ما برگردانده میشود. اگر با نوع دادهای بولین آشنا نیستید، جلسه انواع متغیر و نوع داده در PHP برایتان مفید است.
میخواهیم به کمک حلقه while تا زمانی که مجوز دسترسی نداریم (خروجی false است)، منتظر بمانیم. این کار به کمک کد زیر قابل انجام است:
while( ! is_allowed() ){}
البته چون بدنه خالی است، میتوانیم علامت {}
را قرار ندهیم. برای منفی کردن نتیجه، از عملگر !
استفاده کردهام.
این کد فقط مثالی بود تا متوجه شوید حتماً لازم نیست شرط حلقه از درون بدنه حلقه تغییر کند.
حلقه do while
در حلقه while، ابتدا شرط بررسی میشد و اگر شرط برقرار بود، بدنه آن اجرا میشد. در do-while ابتدا کد اجرا شده و سپس شرط بررسی میشود. اگر شرط برقرار نبود، تکرارهای بعدی انجام نخواهد شد.
در حقیقت زمانی که میخواهیم یک قطعه کد حداقل برای یک بار اجرا شده و در صورت برقراری یک شرط، تکرار آن ادامه پیدا کند، از حلقه do while در PHP استفاده میکنیم.
فرض کنید میخواهیم عدد num را دو برابر کرده و اگر کمتر از 1024 بود، این کار را تکرار کنیم. حلقه زیر دقیقاً همین کار را انجام میدهد:
<?php
$num = 28;
do{
$num = $num * 2;
}while( $num < 1024 );
ترفندهای کار با حلقه در 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
پیشنهاد میکنم یکبار به ابتدای آموزش برگردید و باکسهای کدها را تا انتها مرور کنید. به نظرتان میتوانیم از ساختارهای حلقه به جای هم استفاده کنیم؟ یعنی کدی که با foreach نوشتهایم را با for پیادهسازی کنیم؟ یا for را به while تبدیل کنیم؟
حلقه در زبان برنامه نویسی یک مفهوم است. برای پیادهسازی این مفهوم در PHP از چهار ساختار مختلف میتوانیم استفاده کنیم. در نتیجه، همه اینها در حقیقت یک چیز هستند اما امکانات یا ویژگیهای خاصی در اختیارمان میگذارند.
در جلسه مربوط به تمرین حلقهها در دوره رایگان مکمل php، دو مثال و ۲ تمرین برای یادگیری بیشتر شما زدهام که به بحث حلقه در PHP کاملاً مسلط شوید. 🙂
جمعبندی: آموزش حلقه PHP
در این آموزش با حلقه در PHP آشنا شدیم. در ابتدا انواع Loop در php و سپس ساختار و نحوه استفاده هر کدام از آنها را یاد گرفتیم.
فهمیدیم که حلقه for برای تکرار یک قطعه کد به تعداد دفعات مشخص استفاده میشود. اگر بخواهیم بر روی عناصر یک آرایه عملیاتی انجام دهیم، از حلقه foreach استفاده میکنیم. حلقه while تا زمانی که شرطش برقرار بود، تکرار میشود ولی در حلقه do-while حداقل یکبار اجرا شده و سپس شرط بررسی میشود.
آیا حلقهها در PHP همین مثالهای ساده هستند؟ در جواب باید بگویم از نظر تعریف کردن، بله! به همین سادگی میتوانیم حلقهها را تعریف کنیم. ولی از نظر کاربرد، در جلسات بعدی (مثل کار با دیتابیس PHP) از این ساختار استفادهی زیادی میکنیم.
همین الآن سعی کنید از هر حلقه یک کد نمونه (غیر از مثالهایی که کار کردیم) برای خودتان بنویسید. اگر سؤال یا تجربهای در کار با loopها دارید، در بخش دیدگاههای پایین همین صفحه مطرح کنید.
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام من یه سوالی در مورد حلقه ی فور ایچ داشتم مثلا من یه ارایه دارم که توش اینجوریه که میگم مثلا اسم علی بعد فامیل مثلا حسین زاده بعد میرم ارایه ی جدید چه جوری میشه یک کاری کنم که فقط از اسم اینها استفاده کنم و تا اخر ادامه داشته باشه یعنی مثلا نخواد من بگم مثلا فقط 0 و 1 رو بکن خودش تا جایی که ارایه ها هست ادامه داشته باشه ممنون میشم جواب بدید
سلام
اینطور که متوجه شدم یه آرایه دوبعدی دارید و میخواید روی همه این اعضا حرکت کنید. درسته؟ اگر بله، میتونید از foreach استفاده کنید که از اولین آرایه (اعضای سطح اول) تا آخرین حرکت میکنه.
اگر بخوابیم عکس پازلی کنیم با استفاده از حلقه فور و array rand دیگه چه کدی باید بنویسیم
منظورتون از عکس پازلی چیه؟ اگه یه ماتریس از بخشهای عکس دارید، همین رندوم که گفتید مناسبه. البته میتونید از shuffle هم استفاده کنید.
منظورم اینکه من توی کد چندتا عکس میدم میخوام در خروجی کارم با هر بار refreshجای عکس ها تغییر کنه
بعد این عکسها در سه سطر و ستون باشه باید کد این سطر ستون تو حلقه for بنویسم
شما میتونید یک ماتریس (آرایه تودرتو) در نظر بگیرید که هر خونه، مربوط به یکی از عکسها هست. برای جابجایی از همون
shuffle($arr)
استفاده کنید که رندوم تغییرشون بده.پیشنهاد اینکه یه آرایه ۹ تایی داشته باشید. بعدش با حلقه یا یا یک تابعی که خودتون تعریف کردید، اون رو بهصورت ماتریسی در خروجی نمایش بدید.
سلام
مرسی از اموزشای عالیتون
break رو میشه توی حلقه تودرتو اجراش کرد؟ هرکاری میکنیم عمل نمیکنه. راهنماییم کنید لطفا
سلام
آره میشه! فقط حواست باشه break صرفاً از همون حلقه خارج میشه اما دور بعدی حلقه بالاتر مجدد اجرا میشه. اگر هنوزم مشکلی بود، کدتون رو هم بفرستید با هم چک کنیم.
خیلی خوب توضیح دادید. مرسی
خیلی خوشحالم که از این آموزش استفاده بردید. موفق باشید.