PDA

View Full Version : foreach



engmmrj
یک شنبه 03 دی 1391, 13:30 عصر
حلقه foreach دقیقا چه کاری انجام می دهید؟لطفا با توضیحات کامل توضیح بدید

nsco_nsco
یک شنبه 03 دی 1391, 13:38 عصر
برخی اوقات نیاز است یک عمل خاص بار ها و بارها برای تعداد معین و یا تا تحقق یک شرط خاص انجام شود . مثلا چاپ اعداد 1 تا 100 انجام عملیات چاپ یک عدد صحیح به تعداد 100 بار است . و یا چاپ مشخصات تمامی دانشجویان که در یک جدول خاص از دیتا بیس هستند با عملیات یکسانی صورت می گیرد منتها این عملیات باید به تعداد دانشجویان تکرار شود بدیهی است که چون از قبل نمی دانیم تعداد دانشجویان چقدر است نمی توانیم این دستورات را copy & paste نمائیم . (اگر هم تعداد را می دانستیم این کار بسیار غیر منطقی است .) بنابراین در چنین وضعیت هایی که نیاز به تکرار یک سری عملیات معین داریم از دستورات تکرار و حلقه ها استفاده می کنیم . در php چهار نوع حلقه تکرار وجود دارد که به ترتیب آنها را شرح خواهیم داد :
حلقه for :
این حلقه معمولا در مواردی استفاده می شود که تعداد تکرار ها دقیقا معلوم است . مثلا برای چاپ اعداد 1 تا 100 معلوم است که عملیات چاپ باید 100 بار اجرا شود . حالت کلی کد این حلقه به شکل زیر نوشته می شود :

<?php
for(<counter initialization> ; <conditional statement> ; <new assignment to counter>)
//some codes
?>

حلقه for بالا دارای چهار قسمت است :
1- <Counter Initialization> : که یک شمارنده را برای شمارش تعداد تکرار حلقه مقدار دهی اولیه می کند .
2- <Conditional Statement> : یک عبارت شرطیست که تعیین می کند تا چه زمانی این حلقه تکرار شود و تا وقتی که این شرط (که می تواند یک عبارت شرطی ترکیبی باشد) ارزش درستی یا true داشته باشد این حلقه ادامه می یابد و هنگامی که این مقدار برابر نادرستی یا false قرار بگیرد منجر به خروج از حلقه می شود .
3- <new assignment to counter> : موجب می شود مقدار جدیدی در شمارنده حلقه قرار بگیرد و مقدار قبلی آن تغییر کند .
4- Body : این قسمت کدی است که باید در صورت درستی شرطی که در بند 2 ذکر شد اجرا شود .
روند اجرای دستور for بدین شکل است که ابتدا مرحله 1 یعنی Counter Initiialization انجام می شود ، سپس در مرحله دوم درستی عبارت شرطی بررسی می شود . در این عبارت شرطی معمولا به نوعی از Counter یا شمارنده حلقه استفاده می شود که با انتساب مقدار جدید به آن باید در این جهت حرکت کند که یک زمانی عبارت شرطی مقدار نادرست به خود بگیرد تا بدین شکا از حلقه بی نهایت یا همیشه درست اجتناب شود .
در مرحله سوم نوبت به اجرای بدنه حلقه می رسد و پس از اجرا در مرحله چهارم انتساب جدید به شمارنده صورت می گیرد . در مرحله پنجم دوباره عبارت شرطی بررسی میشود و در صورت درستی یکبار دیگر این حلقه اجرا می شود و به همین ترتیب تا زمانی که شرط نادرست شود شمارنده تغییر کرده ، شرط بررسی شده و بدنه حلقه اجرا می شود . به مثال زیر توجه کنید و سعی کنید آنرا اجرا کنید :
<?php
for($cnt = 1 ; $cnt<6 ; ++$cnt)
echo $cnt."<br />";
?>
در حلقه فوق قصد بر اینست که اعداد 1 تا 5 را چاپ کنیم . در مرحله اول مقدار متغیر cnt برابر 1 شده و شرط بررسی می شود چون 1 کوچکتر از 6 است بدنه داخلی دستور for اجرا می شود . در مرحله بعد یک واحد به cnt اضافه شده و شرط دوباره بررسی می شود و کار همینطور ادامه می یابد تا جایی که مقدار cnt به 6 برسد در اینجا چون 6 از 6 کوچکتر نیست اجرای حلقه for به پایان می رسد و دستور پس از بلوک for اجرا می شود. توجه کنید که در مثال فوق متغیر cnt برای اینکه سطر به سطر چاپ شود به یک تگ br ، الحاق شده است .
لازم به ذکر است که نوشتن دستور for به شکل بالا مربوط به زمانیست که بدنه دستور for تک خطی باشد اگر بدنه این دستور چند خطی باشد یعنی در هر بار تکرار بیش از یک خط کد اجرا شود باید مجموعه دستورات را در داخل آکولاد باز و بسته یعنی } و { قرار داد.
ضمن اینکه هر چهار قسمت اول تا چهارم اختیاری هستند و می توانند وجود نداشته باشند بنابراین دستور زیر نیز یک دستور کاملا درست (از لحاظ دستوری) تلقی می شود :
<?php
for( ; ; );
?>
این حلقه for اگر چه از نظر دستوری درست است ولی دارای یک خطای منطقی است چرا که نشاندهنده یک حلقه بی نهایت است که هیچ گاه پایان نمی پذیرد و پردازنده را تا ابد مشغول نگاه می دارد . در حقیقت نبود هر یک از این پارامتر ها به معنی انجام ندادن کار مشخصی است . حلقه بالا هیچ شمارنده ای ندارد و برای ادامه کار خود به تأمین هیچ شرطی نیز نیاز ندارد و علامت (;) آخر نیز به این معنی است که هیچ کاری انجام نده بنابراین پردازنده تا ابد مشغول انجام دادن "هیچ کاری" می شود .

حلقه تکرار while :
در تکرار این حلقه معمولا از قبل تعداد خاصی مد نظر نیست بلکه این حلقه دائما یک شرط یا عبارت شرطی مرکبی را بررسی می کند و تا زمانی که آن شرط درست باشد بدنه حلقه اجرا می شود . شکل کلی دستور while به شکل زیر است :
<?php
while(<conditional statement>)
//do somethings;
?>
با دستور while حتی می توانید حلقه های بسازید که تعداد تکرار در آنها مشخص است .(مانند دستور for) منتها چون در اینجا شمارنده ای وجود ندارد خود برنامه نویس باید یک شمارنده در نظر بگیرد و افزایش یا کاهش آنرا مدیریت کند . به عنوان مثال ، مسئله چاپ اعداد 1 تا 5 را که در بالا با for نوشتیم در اینجا با دستور while می نویسیم :
<?php
$cnt=1;
while($cnt<6)
{
echo $cnt."<br />";
++$cnt;
}
?>
این برنامه را به شکل زیر نیز می توان نوشت :
<?php
$cnt=1;
while($cnt<6)
echo $cnt++."<br />";
?>
همانطور که می بینید عملگر Increment به همراه متغیر در دستور echo به کار رفته است و چون به صورت پسوندی به کار رفته اول عمل چاپ متغیر انجام شده و سپس یک واحد به متغیر اضافه می شود . این کد را هم اکنون امتحان کنید .

حلقه do - while :
این حلقه که به شکل کلی زیر نوشته می شود مانند حلقه while کار می کند با این تفاوت که شرط درستی حلقه را در آخر حلقه بررسی می کند بنابراین بدنه حلقه در هر صورتی حداقل یک بار اجرا می شود :
<?php
$cnt = 1;
do
{
echo $cnt++."<br />";
}
while($cnt<6)
?>

حلقه foreach :
این حلقه بیشتر برای پیمایش آرایه ها استفاده می شود .
شکل کلی به کار گیری این حلقه به صورت زیر است :
<?php
$array = new array();
//array intialization;
foreach($array as $var)
//do something;
?>
این حلقه به این شکل کار می کند که با پیمایش آرایه هر بار یکی از خانه های آنرا در متغیری بنام var میریزد و در داخل بدنه دستور foreach با متغیر var کار می کند . بار دیگر که دستور foreach اجرا می شود خانه بعدی آرایه را واکشی کرده و در var می ریزد و این ماجرا تا انتهای آرایه تکرار می شود . در زیر مثالی از کاربرد حلقه foreach را می بینید .
<?php
$cars = new array("BMW" , "Audi" , "Benz");
foreach($cars as $vehicle)
echo $vehicle."<br />";
?>
:قلب:

engmmrj
یک شنبه 03 دی 1391, 18:51 عصر
انقدر دیگه مبتدی نیستم:خجالت:
حلقه while و for رو بلد بودم فقط foreach رو بلد نبودم

engmmrj
یک شنبه 03 دی 1391, 18:53 عصر
$cars as $vehicle این یعنی چی چه شرطی هست


$cars = new array("BMW" , "Audi" , "Benz");
foreach($cars as $vehicle)
echo $vehicle."<br />";

کد بالا چیکار میکنه

MMSHFE
یک شنبه 03 دی 1391, 20:40 عصر
cars$ یک آرایه هست که با foreach پیمایش میکنیم و این حلقه هربار یکی از عناصرش رو میگیره و توی حلقه بهش (عنصر جاری که الآن حلقه اون رو مدنظر قرار داده) اسم vehicle$ میده و بدنه حلقه رو با این متغیر اجرا میکنه. بدنه حلقه هم داره vehicle$ رو چاپ میکنه. درنتیجه هربار این حلقه یکی از عناصر آرایه cars$ رو چاپ میکنه تا وقتی که آرایه تمام بشه.
موفق باشید.

nsco_nsco
یک شنبه 03 دی 1391, 23:00 عصر
ببخشید دیر اومدم پاسخ بدم که دوستمون داد اگر سوال دیگری داشتید بگید