آشنایی با حلقه 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
