آشنایی با حلقه foreach در php
حلقه foreach برای پیمایش یک آرایه بر اساس المان های آن استفاده می شود. این حلقه فقط روی آرایه ها و آبجکت ها کار می کند.
سینتکس اول foreach بدون کلید المان ها:
foreach (iterable_expression as $value) statement
سینتکس دوم foreach با کلید المان ها:
foreach (iterable_expression as $key => $value) statement
مثال: چاپ کردن مقادیر یک آرایه با استفاده از حلقه foreach:
$x = [1,2,3]; foreach($x as $y) echo $y; //output: 123
همانطور که در آموزش آشنایی با متغیرها در php بیان کردیم، با استفاده از کاراکتر & می توانیم رفرنس آرایه را در حلقه تغییر دهیم:
$x = [1,2,3]; foreach($x as &$y) $y++; print_r($x); //output: Array ( [0] => 2 [1] => 3 [2] => 4 )
نکته مهم: رفرنس y$ بعد از حلقه نیز باقی مانده و مقدار دارد. لذا بهتر است بعد از حلقه آن را حذف کنیم:
$x = [1,2,3]; foreach($x as &$y) $y++; print_r($x); //output: Array ( [0] => 2 [1] => 3 [2] => 4 ) unset($y);
مثال: چاپ مقادیر آرایه ها و کلید یک آرایه انجمنی:
$x = [ 'one' => 1, 'two' => 2 ]; $count = count($x); $i = 0; foreach($x as $key => $value) { echo $key . ' = ' . $value; if( $i < $count-1 ) echo ' & '; $i++; } //output: one = 1 & two = 2
مثال: چاپ آرایه درونی یک آرایه چندبعدی:
$x = [ 'one' => 1, 'two' => [1,2,3] ]; foreach($x['two'] as $value) echo $value; //output: 123
با استفاده از متد list می توانیم خیلی راحت تر با آرایه های چند بعدی کار کنیم:
$array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b)) echo "A: $a; B: $b\n";
اگر آرایه چند بعدی ما دارای آرایه های تو در توی دیگر باشد، می توانیم از تابع list تو در تو استفاده کنیم:
$array = [ [1, 2, [3, 4]], [3, 4, [5, 6]], ]; foreach ($array as list($a, $b, list($c, $d))) echo "A: $a; B: $b; C: $c; D: $d;";
در مثال بالا، مقادیر a و b به المان های اول و دوم آرایه های درونی اشاره دارند. پس با استفاده از این تابع می توانیم به راحتی حلقه foreach را درون آرایه های چندبعدی ایجاد کنیم. (تعداد مقادیر تابع list اختیاری و بر حسب نیاز است. حداکثر مقدار، برابر طول بزرگترین آرایه است)
برای خارج شدن از حلقه foreach، کافیست از دستور break استفاده کنیم:
$array = [1, 2, 3]; foreach ($array as $val) { if($val > 1){ break; } echo $val; } //output: 1
روش clone syntax برای حلقه foreach نیز قابل استفاده است:
$array = [1, 2, 3]; foreach ($array as $val) : echo $val; endforeach; //output: 123