سبد (0)

تبلیغات

حلقه for در PHP

حلقه for در PHP

Wiki

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

نحوه استفاده:

for (init; condition; increment)
  {
  code to be executed;
  }

پارامترها:

  • init: تنها یکبار در ابتدای حلقه اجرا می شود، و اغلب برای تعریف یک شمارنده استفاده می شود.
  • condition: ارزیابی تکرار حلقه، اگر شرط برقرار باشد دستورات اجرا می شوند، در غیر اینصورت دستورات ادامه نمی یابند.
  •  incrementبعد از هربار اجرای دستورات حلقه، این دستور اجرا می شود و اغلب برای افزایش شمارنده استفاده می شود.

نکته:

  1. در for می توان هرکدام از پارامترهای بالا را خالی گذاشت، به این صورت که اگر شرط خالی باشد، مقدار آن برابر با true در نظر گرفته می شود و حلقه بینهایت بار اجرا میشود! (البته با استفاده از دستور break که بعداً به آن اشاره می شود، می توان آن را قطع نمود)
  2. در for همچنین می توان برای پارامترهای بالا چند دستور مختلف را اجرا نمود به اینصورت که با علامت "," آنها را باید از یکدیگر جدا نمود.

مثال:

در مثال زیر یک حلقه تعریف شده که با i=1 شروع می شود، و تا زمانی که i<=5 باشد ادامه خواهد یافت و به مقدار i در هر بار اجرای حلقه یک واحد اضافه می شود.

<html>
<body>

<?php
for ($i=1; $i<=5; $i++)
  {
  echo "The number is " . $i . "<br />";
  }
?>

</body>
</html>

خروجی کد بالا:

The number is 1
The number is 2
The number is 3
The number is 4
The number is 5


حلقه foreach درPHP

Wiki

مخصوص کار با آرایه ها می باشد.

نحوه استفاده:

foreach ($array as $value)
  {
  code to be executed;
  }

این دستور تمام مقادیر آرایه را یکی یکی از ابتدایی تا انتهایی به درون value می ریزد و دستورات را اجرا می نماید.

نکته: مقدار value کپی داده می باشد و با تغییر آن داده اصلی در آرایه تغییری نمی کند، اما با قرار دادن علامت "&" در ابتدای value یک نشانگر از آن برگردانده می شود، بدین معنا که با تغییر آن داده اصلی درون آرایه نیز تغییر می کند.

مثال1: مثال زیر یک حلقه را نشان می دهد که مقادیر گرفته شده از یک آرایه را چاپ می کند.

<html>
<body>

<?php
$x=array("one","two","three");
foreach ($x as $value)
  {
  echo $value . "<br />";
  }
?>

</body>
</html>

خروجی کد بالا:

one
two
three

مثال2: با قرار دادن علامت "&" در ابتدای value اگر در حلقه این مقدار تغییر کند، داده اصلی نیز تغییر می کند.

<html>
<body>

<?php
$arr=array(1,2,3,4);
foreach($arr as &$value)
{
  echo $value;
  echo " ";
  $value *= 2;
}
echo "<br />";
foreach($arr as $value)
{
  echo $value;
  echo " ";
}
?>

</body>
</html>

خروجی کد بالا:

1 2 3 4
2 4 6 6

مثال3: چاپ کلید و مقدار آن (key and value)

<html>
<body>

<?php
$a = array(
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => 17
);

foreach ($a as $k => $v) {
    echo "a[$k] => $v"."<br />";
}
 
?>

</body>
</html>

خروجی کد بالا:

a[one] => 1
a[two] => 2
a[three] => 3
a[seventeen] => 17

مثال4: چاپ کلید و مقدار آن (key and value) در یک آرایه دو بعدی

<html>
<body>

$families = array("Ahmadi"=>array("a"=>"Ali","b"=>"Reza","c"=>"Sara"),
                  "Naderi"=>array("a"=>"Amir"),
                  "Mohamadi"=>array("a"=>"Poya","b"=>"Parniya")
                 );
foreach ($families as $k => $v)
    foreach ($v as $b=>$v)
    echo "families[$k][$b] => $v "."<br />";

</body>
</html>

خروجی کد بالا:

families[Ahmadi][a] => Ali
families[Ahmadi][b] => Reza
families[Ahmadi][c] => Sara
families[Naderi][a] => Amir
families[Mohamadi][a] => Poya
families[Mohamadi][b] => Parniya


برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

دیدگاه‌ها  

+6 # هما 1394-09-24 17:08
سلام
مثال 2 خروجیش مگه نباید بشه 2468 چرا شده 2466؟؟؟؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+5 # مهدی دالوند 1396-03-08 09:34
روش حل این مشکل را چون طولانی شد در قالب یک فایل pdf نوشته ام
این اموزش قسمت مهمی میباشد و به نظر بنده باید به متن اصلی اضافه شود
www.beyamooz.com/images/PHP/foreach_comment.pdf
[email protected]
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
-4 # hamid fa 1394-09-24 19:46
در مثال دوم شما باید یک val دگ تعریف کنید و توی مقدار قبلی نریزید چون از قبل مقداری داخل آن وجو داره به همین دلیل خروجی اشتباه است
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
-3 # فرید 1395-01-14 22:07
به نقل از hamid fa:
در مثال دوم شما باید یک val دگ تعریف کنید و توی مقدار قبلی نریزید چون از قبل مقداری داخل آن وجو داره به همین دلیل خروجی اشتباه است

من هم فکر میکنم خروجی باید 2468 باشه. به گفته خودتون اسم متغییر رو هم تغییر دادم و نتیجه فرق کرد ولی دلیلش رو نفهمیدم !
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
-3 # احسان عباسی 1395-01-15 00:11
سلام به صورت زیر عمل کنید: یعنی در حلقه ی دوم متغیر value رو تغییر می دهیم، مشکل حل میشه:
<html >
<body >

<?php
$arr=array(1,2,3,4);
foreach($arr as &$value)
{
echo $value;
echo " ";
$value *= 2;
}
echo "<br / >";
foreach($arr as $value2)
{
echo $value2;
echo " ";
}
? >

</body >
</html >
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+4 # مهدی 1396-03-10 04:02
با تغییر متغییر و ایجاد val2 کار بیخود انجام دادیم مث وصله زدن وقتی میتونیم با بابع unset هم کار قشنگتری انجام بدیم هم دلیل 6 بودن رو بفهمیم
php.net/manual/en/control-structures.foreach.php
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # الهه 1394-05-02 20:15
سلام.
اگه بخوایم در مثال 3 مانند مثال 2 مقدار رو تغییر دهیم و بعد تغییر را نگه داذیم باید چیکار کنیم؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1394-05-02 20:41
به صورت زیر عمل کنید:
$a = array(
"one" => 1,
"two" => 2,
"three" => 3,
"seventeen" => 17
);

foreach ($a as $k => &$v) {
echo "a[$k] => $v"."<br />";
$v*=2;

}
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # شاهین صالح 1394-04-22 12:51
سلام. در مثال 4، چرا وقتی تگ php وجود داره ارور میده؟ چرا نباید تگ php تایپ بشه؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # احسان عباسی 1394-04-22 13:07
سلام
دقت کنید که در مثال 4 حتما باید کد های php رو داخل تگ phpقرار بدهید. در غیر این صورت با error مواجهه خواهید شد. بنده در لوکال تست کردم با استفاده از تگ php کاملا درست عمل می کنه. در واقع این یک خطای تایپی است.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # شاهین صالح 1394-04-24 12:40
البته مثال شما درسته، من آرایه ها رو اضافه و کم کرده بودم و سینتکس ارور میده. و فکر میکنم به آرایه ی درونی مربوط میشه. یعنی b$ رو نمیشناسه. k , v و b اسامی خاص هستن؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # احسان عباسی 1394-04-24 12:56
k و v وb پارامتر هایی هستند که کلیدها(key) و مقادیر(value) در درون آنها قرار می گیرند. درواقع متغیری هستند که بعنوان پارامتر استفاده شده اند.مثلا برای آرایه ی families$ ، در حلقه ی foreach ، در هر بار اجرا کلیدها در k$ قرار می گیرند و مقادیر در v$ قرار می گیرند. چون از آرایه های تو در تو استفاده شده است، پس v$ خودش یک آرایه است. حالا در حلقه ی foreach دوم می خواهیم عناصر v$ را که یک آرایه است استخراج کنیم. دوباره از همان روش قبل استفاده می کنیم و این کلیدها و عناصر را در داخل پارامترهای b$ و v$ قرار می دهیم. و سپس آنها را چاپ می کنیم.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # شاهین صالح 1394-04-24 13:11
ممنونم از توضیحاتتون.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # شاهین صالح 1394-04-24 12:31
Parse error: syntax error, unexpected end of file, expecting variable (T_VARIABLE) or ${ (T_DOLLAR_OPEN_ CURLY_BRACES) or {$ (T_CURLY_OPEN) in C:\xampp\htdocs \w3s\37.php on line 20
این ارور رو میده وقتی در لوکال هاست تست میکنم.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+3 # احسان عباسی 1394-04-24 13:26
این طور که نوشته شده، در خط 20 از کدهایتان مشکل وجود داره. احتمالا در این خط(در پایان کدهایتان) در بستن کد php، از یک آکولاد بلافاصله قبل از بستن تگ php استفاده کرده اید. در صورتی که باید حداقل یک فاصله بگذارید. مثلا شما باید از نمونه های زیر پرهیز کنید:
{?>
<?php}
بعنوان مثال باید به صورت های زیر عمل کنید:

{ ?>
<?php {

منبع برای اطلاعات بیشتر: stackoverflow.com/questions/11482527/parse-error-syntax-error-unexpected-end-of-file-in-my-php-code
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # سعید 1394-02-28 10:10
1 2 3 4 /n2 4 6 6

این خروجی کد بالاست. دقیقا همونی که هست رو کپی کردم. کامنت آخر سوال منم هست.
اگه دقت کنید در سوال قبلی و خروجی اون دو عدد آخر تکراری هستند
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # امیر پهلوان صادق 1394-02-31 09:09
بله حق با شماست، در مثال 2 از مطلب بالا، خروجی حلقه دوم اصلاح شد.
دلیل اینکه چرا در حلقه دوم دو عدد آخر تکراری است در لینک زیر توضیح داده شده است:
stackoverflow.com/questions/3307409/php-pass-by-reference-in-foreach
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # محمد فیض 1394-09-26 08:09
به نقل از امیر پهلوان صادق:
بله حق با شماست، در مثال 2 از مطلب بالا، خروجی حلقه دوم اصلاح شد.
دلیل اینکه چرا در حلقه دوم دو عدد آخر تکراری است در لینک زیر توضیح داده شده است:
stackoverflow.com/questions/3307409/php-pass-by-reference-in-foreach

باسلام و تشکر بابت سایت فوق العاده بیاموز،
ببخشید من اون سایت رو هم خوندم اما درست متوجه نشدم. لطف می کنید مثل همیشه به زبان ساده ، علت تکرار 6 رو توضیح بدید.
ممنون.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # hamid fa 1394-09-26 10:43
سلام به شما دوست عزیز و گرامی چند باری این مسئله توسط من و همکاران توضیح داده شده

نگاه کنید برای اینکه دوباره چهار عدد بعدی رو در foreach چاپ کنید شما باید val دیگری رو بگیرید و نباید از val قبلی که 4 خونه قبل و 4 عدد قبلی در اون بود 4 خونه جدید رو هم در اون بریزید چون آخرین خونه که شش باشه داخل ول قبلی موجود هستش

مثل کد زیر که در حلقه foreach دومی کلا یک متغیر val دیگر تعریف شده است و دوباره عدد را داخل arr گذاشته ایم و چاپ کرده ایم


foreach ($arr as $vall)
{
echo $vall." ";
}
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # mehrsa 1394-01-24 22:08
سلام, چرا در مثال 2 foreach اول 1 2 3 4 چاپ شدبعد 2 4 6 6 چاپ شد؟ مگه عمل *2 اول نیومده؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # امیر پهلوان صادق 1394-01-24 22:50
سلام$arr=array(1,2,3,4);
forea ch($arr as &$value)
{
echo $value;
echo " ";
$value *= 2;
}
echo "/n";
forea ch($arr as $value)
{
echo $value;
echo " ";
}

در دستور foreach اول، در ابتدای متغیر value از عملگر & استفاده شده است. بنابراین اگر در حلقه، مقدار value تغییر کند، داده اصلی نیز تغییر خواهد کرد.
توجه داشته باشید با هر بار اجرای حلقه، محتوای یک سلول از آرایه در متغیر value قرار می گیرد. و در خط 4 از کد بالا این مقدار چاپ می شود. در خط 6 محتوای value ضربدر 2 می شود و چون از علامت & در ابتدای value استفاده شده است، محتوای سلول آرایه نیز تغییر می کند. نهایتاً خروجی حلقه اول 1 2 3 4 خواهد بود. و مشخص است که عمل چاپ قبل از عملیات ضرب انجام شده است...!
اما حالا زمان اجرای حلقه دوم، دیگر تمام مقادیر آرایه ضربدر 2 شده اند و خروجی آن 2 4 6 6 خواهد بود.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # Hossein Shafiei 1393-11-06 21:58
$arr3=array(1,2,3,4,6,7,8,9,10);
foreach($arr3 as &$value)
{
echo $value;
echo " ";
$value *= 10;
}
echo " ---------- ";
foreach($arr3 as $value)
{
echo $value;
echo " ";
}

وقتی کد اجرا میشه خروجی اینطوری در میاد
1 2 3 4 6 7 8 9 10 ---------- 10 20 30 40 60 70 80 90 90
علتش چیه؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # امیر پهلوان صادق 1393-11-07 09:20
در foreach اول از علامت & استفاده شده است، بنابراین زمانی که دستور زیر در هر بار اجرای حلقه اتفاق می افتد:
$value *= 10;
مقدار اصلی در آرایه نیز تغییر می کند. و نهایتاً در foreach دوم، مقادیر تغییر یافته چاپ خواهد شد.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن

آموزش صوتی PHP

بستن
مدرس:
سوال و جواب:

ابزاری که در پیش روی دارید یکی از ابزارهای بسیار کاربردی سایت بیاموز در زمینه آموزش است، این ابزار برای سهولت یادگیری شما کاربران محترم طراحی شده است.

فقط کافی است روی عنوان پاراگراف مورد نظرتان کلیک کنید تا پخش صدا آغاز شود ...!

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه پرداخت آنلاین - بانک اقتصاد نوین پرداخت آنلاین - بانک سامان
 
دوره های آموزشی راه اندازی کسب و کارهای اینترنتی
تبلیغات اینترنتی