حلقه foreach چیست و چه تفاوتی با for دارد

در مقاله حلقه for در php به کاربرد ها و نحوه استفاده از آن ها در زبان برنامه نویسی php اشاره کردیم. گفتیم که حلقه های for برای اجرای یک تکه کد (بلوکی از کد) استفاده می شود.

حلقه foreach عملکردی مشابه با حلقه for دارد و می توان گفت روش ساده‌شده حلقه for می باشد. بنابراین با روشی ساده تر می توانیم یک آرایه را پیمایش کنیم و به عناصر موجود در آرایه دسترسی داشته باشیم.

با یک مثال موضوع را روشن تر میکنیم. شما یک آرایه به نام numbers دارید که اعداد 1 تا 5 در آن قرار دارد.

$numbers = [1, 2, 3, 4, 5];

این آرایه در حالت معمول با استفاده از یک حلقه for به صورت زیر قابل پیمایش است.

for ($i = 0; $i < count($numbers); $i++) {
    echo $numbers[$i] . ' ';
}

برای اینکه ساده تر بتوانید این کار را انجام بدهید، می توانید از یک حلقه foreach به صورت زیر استفاده کنید.

foreach ($numbers as $row) {
    echo $row . ' ';
}

برای این مثال، حلقه foreach ساده و کاربردی تر است. بنابراین در شرایط متفاوت نیاز داریم تا بنا به دلایلی از حلقه for یا foreach استفاده کنیم. نکته ای که در رابطه با حلقه foreach باید به آن دقت کرد کلمه کلیدی as است.

پارامتر اول foreach آرایه مورد نظر ما می باشد که می خواهیم آن را پیمایش کنیم و سپس با استفاده از کلمه کلیدی as پارمتر دوم row را تعریف می کنیم. در هر بار تکرار حلقه foreach، یک عنصر از ‌آرایه را در اختیار داریم که با استقاده از متغییر row قابل دسترس است.

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

foreach ($numbers as $key => $value) {
    echo 'key: ' . $key . ' value: ' . $value;
}

اگر با آرایه های انجمنی در php آشنایی داشته باشید، کد بالا به سادگی قابل درک است.

ساختار دستوری جایگزین برای foreach

مانند دستورات شرطی می تواند آکولاد های بدنه کد را حذف کرد و به جای آنها از : و کلمه کلیدی endforeach استفاده کرد.

$numbers = [1, 2, 3, 4, 5];

foreach ($numbers as $key => $value) {
    echo 'key: ' . $key . ' value: ' . $value;
}

foreach ($numbers as $key => $value):
    echo 'key: ' . $key . ' value: ' . $value;
endforeach;

 

منبع: سایت it3du