article

حلقه for، foreach و while در PHP

php-for-while-loop

تا این مرحله از آموزش های مقدماتی PHP تا حدود زیادی مسیرمان را به سمت یادگیری این زبان پرکاربرد برنامه نویسی وب هموار کرده ایم، پس از آشنایی با مبحث متغیرها، عملگرهای محاسبه، مقایسه و استدلال منطقی، کار با دستورات شرطی if و else و بررسی نحوه استفاده از switch و case در کدنویسی ها، این بار نوبت به آموزش کاربرد حلقه های for، foreach و while در PHP است، از آنجایی که حلقه ها در زبان های برنامه نویسی و به طور خاص در برنامه نویسی PHP کاربردهای فراوانی دارند یادگیری و درک این مبحث می تواند در روند پیشرفت آموزش ها بسیار کمک کننده باشد، در ادامه خواهیم گفت که چرا و چگونه باید از حلقه for، foreach و while در کدنویسی استفاده کنیم.

حلقه (Loop) چیست؟


در اکثر زبان های برنامه نویسی و از جمله PHP حلقه ها برای انجام فرآیندها و بلاکی از کد در دور تکرار کاربرد دارند، در هنگام کدنویسی موقعیت های زیادی پیش می آید که بخواهیم قسمتی از کد برنامه را با تکرار اجرا کنیم، در این مواقع ابزار برنامه نویس معمولا استفاده از حلقه (Loop) است، به طور مثال اگر در یک مسابقه 5 گروه شرکت کننده داشته باشیم و بخواهیم امتیاز کسب شده آنها را در جدول ترسیم کنیم، می توانیم این کار را با حلقه انجام دهیم:
<?php
echo '<table border="1">';
$group = array('A' => 120, 'B' => 125, 'C' => 83, 'D' => 154, 'E' => 123);
foreach($group as $key => $value) {
    echo '<th>' . $key . '</th>' . '<td>' . $value . '</td><tr></tr>';
}
echo '</table>';
?>
با اجرای نمونه کد بالا نتیجه در جدول نمایش داده خواهد شد، به فرض:
A    120
B    125
C    83
D    154
E    123
در این نمونه کد از آرایه و حلقه foreach استفاده شده که در ادامه بیشتر توضیح خواهیم داد.

انواع حلقه در PHP


مانند اغلب زبان های برنامه نویسی در PHP نیز چند نوع حلقه (Loop) وجود دارد که با به حساب آوردن همه آنها می توان تعداد حلقه در PHP را در چهار دسته خلاصه کرد:
حلقه for، حلقه foreach، حلقه while و حلقه do while.
حلقه for برای مواقعی کاربرد دارد که تعداد دور حلقه عدد مشخصی باشد، حلقه foreach برای کار با آرایه ها (کلید و مقدار) مناسب است، حلقه while برای مواقعی که دور حلقه صرفا مبتنی بر برقرار (true) یا عدم برقرار (false) بودن یک شرط است و تعداد دور حلقه از قبل مشخص نباشد کاربرد دارد، در نهایت شکل دیگری از حلقه while تحت عنوان do while وجود دارد که تنها تفاوت آن با while ساده اجرای اولین دور بدون در نظر گرفتن true یا false بودن شرط حلقه است، در ادامه به صورت موردی در خصوص هر کدام از حلقه ها و نحوه کاربرد آنها توضیح خواهیم داد.

حلقه for در PHP


اولین حلقه ای که می خواهیم بررسی کنیم for است، از حلقه for در PHP زمانی استفاده می کنیم که بخواهیم به تعداد مشخصی دور تکرار داشته باشیم، به عبارتی دور تکرار در حلقه for از قبل مشخص است و معمولا در هر دور فرآیندی صورت می گیرد که در نهایت شرط حلقه false شده و دور تکرار به اتمام برسد، مثال:
<?php
//حلقه for
for($i = 1; $i <= 3; $i++){
    echo "دور شماره $i <br>";
}
?>
مثال بالا خروجی زیر را تولید خواهد کرد.
دور شماره 1 
دور شماره 2
دور شماره 3
توضیح:
- شیوه نگارش (Syntax) حلقه for به این صورت است که ساختار اصلی سه عبارت (Expression) دارد، عبارت اول همان مقادیر پیش فرض برای متغیر (i = 1) است، عبارت دوم تعیین شرط برای زمان خاتمه حلقه است (i <= 3) و عبارت آخر تغییرات مقادیر متغیر در هر دور حلقه است (افزایش i به میزان یک واحد با عملگر ++).
- عبارت i در مثال بالا فرضی و انتخابی است، طبق رویه برنامه نویسان معمولا از کاراکتر i بدین منظور استفاده می کنند، در صورت نیاز می توان از هر عنوان مجاز دیگری استفاده کرد.
- دقت کنیم در برنامه نویسی حلقه هایی که می نویسیم باید در مرحله ای به پایان برسند، اگر بررسی شرط حلقه همیشه درست (true) باشد دور تکرار آن تا بی نهایت (Infinite Loop) ادامه می یابد و قاعدتا این حالت یک باگ و نقص بزرگ در برنامه است و نهایتا باعث از کار افتادن مرورگر کاربر یا Down شدن سرور خواهد شد.
در مثال زیر اشتباه کوچکی صورت گرفته و حلقه تا بی نهایت ادامه پیدا می کند، با کمی دقت متوجه ایراد کار خواهیم شد:
<?php
//حلقه for تکرار بينهايت
for($i = 0; $i >= 0; $i++){
    echo "دور شماره $i <br>";
}
?>
با دقت در ساختار حلقه مشخص است که شرط آن همواره true و برقرار است (مقدار i عددی مساوی 0 یا بزرگتر از آن خواهد بود).

حلقه foreach در PHP


نوع دیگری از حلقه در PHP تحت عنوان foreach برای کار با آرایه ها کاربرد دارد، آرایه در زبان های برنامه نویسی و از جمله برنامه نویسی وب کاربردهای زیادی دارد و به همین دلیل مفسر PHP برای کنترل و پردازش این نوع متغیرها ابزار حلقه foreach را در نظر گرفته است، به طور مثال وقتی در فرم HTML فیلد Select با قابلیت انتخاب چند value را به سرور ارسال می کنیم معمولا از طریق حلقه است که می توانیم به تمام مقادیر ارسال شده دسترسی داشته باشیم، در این حالت حلقه foreach در هر دور از ابتدا به انتها کلید و مقدار آرایه را پردازش کرده و تا زمانی که اطلاعات وجود دارد و شرط حلقه درست یا true باشد، دور تکرار ادامه پیدا می کند، مثال:
برای انتخاب چند مورد کليد Ctrl را نگهداريد.<br>
<form action="" method="post">
<label for="select">انتخاب یک یا چند مورد:</label>
<select name="select[]" id="select" multiple="multiple" size="4">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<br>
<input name="check" type="hidden" value="1">
<input type="submit" value="ارسال">
</form>

<?php
$select = @$_POST['select'];
//print_r($select);
$check = @$_POST['check'];

if($check == 1) {
    foreach($select as $key => $value) {
        echo 'مقدار دور شماره ' . $key . ': ' . $value . '<br>';
    }
}
?>
در صورت انتخاب مقدار دوم و چهارم از فیلد Select خروجی مثال بالا به صورت زیر خواهد بود:
مقدار دور شماره 0: 2
مقدار دور شماره 1: 4
توضیح:
- زمانی که بخواهیم با فیلد Select چند مقدار به صورت همزمان ارسال شوند باید قسمت name آن را با علامت [] در انتها درج کنیم این کاراکتر یک قرارداد است و به مرورگر می گوید که قصد ارسال مقادیر به صورت آرایه را داریم، همچنین پارامتر mutiple نیز برای تگ select باید تنظیم شده باشد.
- پس از انتخاب و ارسال اطلاعات فرم در سمت سرور مقادیر با متد POST دریافت و به متغیر select نسبت داده می شود، اگر قسمت print_r را اجرا کنیم نتیجه مشابه نمونه زیر در خروجی چاپ می شود:
Array ( [0] => 2 [1] => 4 )
این نتیجه همان آرایه و مقدار ارسال شده است.
- دقت کنیم شمارش در آرایه از 0 شروع می شود و اولین مقدار 1 نیست، در اینجا نیز فیلد اول با کلید 0 و مقدار 2 و فیلد چهارم با کلید 1 و مقدار 4 مشخص است.
- حلقه foreach از دو شیوه نگارش (Syntax) پشتیبانی می کند، هم به صورت:
$array as $value
و هم به صورت:
$array as $key => $value
همان طور که مشخص است در هر دو حالت قسمت مقدار وجود دارد.
- هر کلید و مقدار آرایه در هر دور حلقه به ترتیب به عنوان ورودی انتخاب و پس از اعمال پردازش تعیین شده نوبت به کلید و مقدار بعدی می رسد تا زمانی که پارامترهای آرایه به انتها برسند، در مثال بالا آرایه ما دارای دو مقدار است پس دور حلقه foreach برای هر کدام یک بار اجرا خواهد شد (for به معنی برای و each به معنی هر).
- درک صحیح نحوه عملکرد حلقه foreach نیازمند آشنایی کامل با مبحث آرایه ها در PHP است، لذا در اینجا به همین مقدار بسنده می کنیم.

حلقه while در PHP


ساختار حلقه while در PHP و اغلب زبان های برنامه نویسی به این صورت است که با بررسی شرط تا هر زمان که برقرار و درست (true) باشد کدهای داخل کاراکترهای {} اجرا می شود، برخلاف حلقه for که باید تعداد دور حلقه از قبل و درون ساختار حلقه مشخص باشد در حلقه while الزامی به مشخص بودن تعداد دور حلقه نیست و خاتمه حلقه مبتنی بر false شدن بررسی برقراری شرط آن است که عمدتا مبتنی بر متغیری بیرون از حلقه است، در مثال ساده زیر حلقه while را تا زمانی که تعداد کاربران (متغیر فرضی user) بیشتر از عدد 0 است ادامه داده و خروجی از آن گرفته ایم:
<?php
//مقادير پيش فرض براي متغير
$users = 5;
//حلقه while
while($users > 0){
    echo "کاربر شماره $users <br>";
    $users--;
}
?>
خروجی کد بالا به صورت زیر خواهد بود:
کاربر شماره 5 
کاربر شماره 4
کاربر شماره 3
کاربر شماره 2
کاربر شماره 1
توضیح:
- ابتدا برای متغیر فرضی users یک مقدار پیش فرض قرار می دهیم تا بعد در حلقه while برای آن شرط تعیین کنیم.
- سپس در قسمت مربوط به حلقه while بررسی می کنیم تا زمانی که مقادیر متغیر users بزرگتر از صفر باشد بلاک کد داخل کاراکترهای {} اجرا شود.
- درون حلقه یک دستور خروجی echo نوشته ایم که در هر دور مقادیر را چاپ می کند و در قسمت آخر در هر دور حلقه یک واحد از متغیر users کاسته می شود و این کار تا زمانی که مقادیر این متغیر بزرگتر از 0 است ادامه می یابد.
- دقت کنیم چون متغیر فرضی ما در این مثال به صورت عددی بود می توانیم بر روی آن اعمال ریاضی مثل جمع، تفریق و... را انجام دهیم، در برنامه نویسی سطح بالاتر موقعیت هایی پیش می آید که انواع متفاوتی از داده ها (String، Integer، Boolean، Array و...) را باید با توجه به نوع آنها بررسی کنیم.

مثال دیگری از کاربرد حلقه while در PHP


برای آشنایی بیشتر مثال دیگری از کاربرد حلقه while در برنامه نویسی PHP را با هم بررسی می کنیم:
<?php
//مقادیر پیش فرض برای متغیر
$users = 5;
$admin = 1;
//حلقه while
while($users > 0){
    //حلقه تو در تو
    while($admin > 0){
        echo "مدیر سایت، خوش آمدید<br />";
        $admin--;
    }    
    echo "کاربر شماره $users خوش آمدید<br />";
    $users--;
}
?>
خروجی کد بالا به صورت زیر خواهد بود.
مدیر سایت، خوش آمدید
کاربر شماره 5 خوش آمدید
کاربر شماره 4 خوش آمدید
کاربر شماره 3 خوش آمدید
کاربر شماره 2 خوش آمدید
کاربر شماره 1 خوش آمدید
توضیح:
- مثال بالا نحوه استفاده از حلقه while درون حلقه ای دیگر را به صورت تو در تو نشان می دهد.
- ساختار حلقه با کمی تامل قابل درک است، تنها چیزی که اینجا اضافه کرده ایم متغیر admin و حلقه مربوط به آن است که در درون حلقه اصلی اجرا می شود.
- استفاده از این شیوه یعنی حلقه های تو در تو در برنامه نویسی سطح پیشرفته تر PHP با توجه به نیاز برنامه ها کاربردهای خاص خودش را دارد.

حلقه while بدون شرط در PHP


گفتیم در حالت عادی حلقه while باید همراه با یک شرط استفاده شود اما این قابلیت در مفسر PHP وجود دارد که حلقه while را بدون در نظر گرفتن شرط و صرفا با درج عبارت true استفاده کنیم، مثال:
<?php
$i = true;
$loop = 1;

while(true) {
    if($i === false) {
        break;
    } else {
        echo 'Loop: ' . $loop . '<br>';
    }

    if($loop > 4) {
        $i = false;
    } else {
        $loop++;
    }
}
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
Loop: 1
Loop: 2
Loop: 3
Loop: 4
Loop: 5
همان طور که مشخص است در صورتی که متغیر فرضی loop به مقدار 5 برسد متغیر i به صورت false مقداردهی می شود و در نتیجه در دور بعدی بررسی شرط if اول مثبت شده و دستور break اجرا می شود، در ادامه خواهیم دید که با اجرای دستور break دور حلقه while به پایان می رسد.

حلقه do while در PHP


در برنامه نویسی وب با PHP گاهی مواقع پیش می آید که بخواهیم حلقه while را بدون بررسی شرط آن حداقل یک بار اجرا کنیم و در دورهای بعدی بررسی کنیم که آیا شرایط ادامه حلقه مهیا است یا خیر، مفسر PHP بدین منظور از ساختار do while که شبیه while عادی است بهره می گیرد، تنها تفاوت این است که در do while دور اول حلقه بدون هیچ پیش شرطی اجراء می شود اما دورهای بعد مثل این است که به روال عادی حلقه while بازگشت کنیم، مثال زیر روشن است:
<?php
//مقادیر پیش فرض برای متغیر
$i = 1;
do{
    echo "کاربر شماره $i خوش آمدید<br>";
    $i--;
}
//حلقه while
while ($i > 1);
?>
در مثال بالا با وجود اینکه در قسمت شرط while گفته ایم تا زمانی که متغیر i از 1 بزرگتر باشد و مقادیر این متغیر به صورت پیش فرض 1 است (شرط برقرار نیست)، اما خروجی زیر به مرورگر ارسال می شود:
کاربر شماره 1 خوش آمدید
این حالت به جهت خاصیت ذاتی حلقه do while است که دور اول حلقه بدون بررسی شرط آن اجرا می شود.

استفاده از break و continue در حلقه ها


در ساختار حلقه ها در صورت نیاز می توانیم از دو دستور کلیدی break و continue استفاده کنیم، اجرای دستور break باعث اتمام کلی حلقه شده و دستور continue باعث ایجاد حالت پرش به دور بعدی خواهد شد، مثال:
<?php
$num = 10;

while(true) {
    if($num == 4) {
        $num--;
        continue;
    } elseif($num == 1) {
        break;
    }

    if($num % 2 == 0) {
        echo "$num: Even - زوج<br>";
    } else {
        echo "$num: Odd - فرد<br>";
    }

    $num--;
}
?>
با اجرای نمونه کد بالا خروجی زیر در مرورگر چاپ می شود:
10: Even - زوج
9: Odd - فرد
8: Even - زوج
7: Odd - فرد
6: Even - زوج
5: Odd - فرد
3: Odd - فرد
2: Even - زوج
نکته مهم این نمونه ساختار کاهش یک واحدی متغیر فرضی num در قسمتی است که می خواهیم دستور continue را اجرا کنیم، اگر این کاهش اتفاق نیفتد حلقه در دور تکرار بینهایت گرفتار می شود چون مقدار num همواره 4 است و در دورهای بعدی پیوسته دستور شرطی if حلقه اجرا می شود!

شیوه نگارش (Syntax) جایگزین در حلقه ها


در انتهای این مبحث بد نیست اشاره ای به دیگر شیوه های نگارش (Syntax) حلقه ها در PHP داشته باشیم، مفسر PHP علاوه بر در نظر گرفتن شیوه دستوری متداول برای نوشتن حلقه ها شکل دیگری از نگارش را تحت عنوان "دو نقطه یا Colon Syntax" پشتیبانی می کند که البته خیلی متداول نیست اما جهت آشنایی بیشتر چند نمونه زیر را بررسی می کنیم:
<?php
for($i = 1; $i <= 10; $i++):
    echo $i;
endfor;
?>
خروجی:
12345678910

<?php
$i = 1;
while($i <= 10):
    echo $i;
    $i++;
endwhile;
?>
خروجی:
12345678910
در این شیوه به جای استفاده از کاراکترهای {} جهت تعیین محدوده بلاک حلقه، از کاراکتر : و عبارت endfor یا endwhile استفاده شده است، این سبک حلقه در نتیجه هیچ تفاوتی با شیوه متداول ندارد و صرفا شکل ظاهری آن متفاوت است.
sectionدسته بندی: آموزش مقدماتی » PHP
related مطالب بیشتر:
» تعریف و استفاده از متغیر (Variable) در PHP
» دستور switch و case در PHP
» توابع کار با آرایه در PHP - بخش اول
» آموزش برنامه نویسی وب با PHP
» آرایه (Array) در برنامه نویسی PHP
commentنظرات (۶۵ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: ابوالفضل
۰۱:۳۴ ۱۳۹۷/۰۳/۲۴
سلام استاد واقعا ممنون از راهنمایی های همیشگیتون
من یه حلقه foreach دارم که روی بیش از صد هزار تا رکورد دیتابیس عملیاتی رو انجام میده اوایل این کار مثلا در بیست ثانیه انجام میشد اما الان نیمه کاره انجام میشه لطفا راهنماییم کنید در ضمن بنده از سرورهای پر قدرت اشتراکی استفاده می کنم
پاسخ: 
بدون بررسی برنامه و سورس کدها صرفا می توان به صورت کلی راهنمایی کرد! به هر حال استفاده از حلقه foreach به تعداد اشاره شده به خودی خود ایرادی ندارد اما به شرط اینکه هم کدنویسی بهینه باشد (به طور مثال تا حد امکان ستون هایی درگیر باشند که واقعا مورد نیاز هستند) و هم قدرت سرور توان پردازش حجم مورد نظر از درخواست ها را داشته باشد، بسته به ساختار دیتابیس و برنامه ای که می نویسید معمولا همیشه راه حل هایی وجود دارد که با کمترین فشار به سرور پردازش های مورد نظر صورت گیرد، اگر با رعایت همه این موارد مشکل پابرجا بود یا باید قدرت سرور را افزایش دهید یا اینکه به روش های مختلف مانند استفاده از Cron jobs ردیف ها را محدود به تعداد کمتری کنید و به فرض هر ده هزار ردیف یک بار دستورات را اجرا نمائید.
نویسنده: fatemeh
۱۵:۱۱ ۱۳۹۷/۰۵/۲۶
میخام برنامه ای بنویسم که با استفاده از حلقه ها خروجی زیر رو چاب کنه؟؟
1
1 2 1
2 3 2 1
3 4 3 2 1
4 5 4 3 2 1
پاسخ: 
با حلقه تو در توی for این کار عملی است، نمونه کد:
<?php
$result = null;

for($i = 0; $i < 5; $i++){
if($i != 0){
$result .= $i;
}

for($n = $i; $n >= 0; $n--){
$result .= $n + 1;
}

$result .= '<br>';
}

echo $result;
?>
نویسنده: M
۱۵:۲۱ ۱۳۹۸/۰۱/۲۱
سلام من یه وب دارم درست میکنم که توش نیاز به حلقه تکرار با for دارم.. جدول توانی تا توان ۴ میخوام.. اگه راهنماییم کنید ممنون میشم
پاسخ: 
برای محاسبه توان های عدد و نمایش به صورت جدول در PHP می توانید از نمونه کد زیر الگوبرداری کنید:
<?php
function myPowerTable($number, $power){
$tbl_start = '<table border="1"><tbody><tr>';
$tbl_header = '<th>Number</th><th>Power</th><th>Result</th></tr><tr>';
$tbl_body = null;
$tbl_end = '</tbody></table>';

for($i = 1; $i <= $power; $i++){
if($i == $power){
$last_tr = '</tr>';
} else {
$last_tr = '</tr><tr>';
}

$tbl_body .= '<td>' . $number . '</td><td>' . $i . '</td><td>' . pow($number, $i) . '</td>' . $last_tr;

}

$result = $tbl_start . $tbl_header . $tbl_body . $tbl_end;

return $result;
}
echo myPowerTable(2, 4);
?>
نویسنده: M. Sh
۱۶:۰۵ ۱۳۹۸/۰۲/۱۹
سلام طاعات تون قبول باشه ببخشید یه سوال داشتم. میخوام بدونم کد php کم کردن ظرفیت چی میشه مثلا من میخام یه پروژه ایرو بایک استاد بردارم ظرفیت استاد 3 تاست میخوام بدونم چه کدی بنویسم که یکبار بردارم اون 3 بشه 2؟ باید ازحلقه for استفاده کنم؟
پاسخ: 
سوالتان مبهم است! در PHP برای کاهش یک مقدار می توانیم از عملگر -- یا تفریق استفاده کنیم، مثال:
<?php
$value = 3;
$minus = 1;

$value = $value - $minus;
echo $value;

$value = $value--;
echo $value;
?>
استفاده از حلقه در شرایطی است که بخواهیم یک روند را به صورت تکرار در کدنویسی داشته باشیم، اگر هم مقادیر در دیتابیس نگهداری می شود باید با دستور SELECT و UPDATE در MySQL آشنا باشیم و مقدار کاهش یافته جدید را جایگزین کنیم.
نویسنده: نرگس
۱۳:۰۳ ۱۳۹۸/۰۹/۱۳
یه سوال دبیرمون بهم داده که با استفاده از آرایه پنج نمره رو دریافت کرده و در حلقه for معدلشان را محاسبه کرده و نمایش بده من خودم یکم محاسبه کردم ولی بازم جواب نگرفتم
پاسخ: 
می توانید از نمونه کد زیر الگوبرداری کنید:
<?php
$array = array(14, 13, 16, 18, 20);
$count = count($array);
$all = 0;

for($i = 0; $i < $count; $i++){
$all += $array[$i];
}

$average = $all / $count;

echo $average;
?>
برای درک بهتر لطفا مبحث آرایه و حلقه ها را در PHP مطالعه کنید.
نویسنده: کیوان
۱۸:۲۲ ۱۳۹۹/۰۲/۱۳
سلام ممنون از سایت خوبتون،
من یه فرم دارم که اطلاعاتش رو از دیتابیس میگیره، چطور میتونم با نوشتن حلقه بعد از چاپ سه فرم به سطر بعدی برم، یعنی تو هر سطر سه تا فرم باشه؟
پاسخ: 
ساختار دیتابیس و خروجی مد نظر مشخص نیست، با توجه به توضیحات اگر می خواهید برای هر ردیف دیتابیس سه فرم خروجی بگیرید و به ردیف بعدی بروید نمونه ساختار زیر کاربرد دارد:
<?php
$loop = 1;
while($row = mysqli_fetch_array($query)){
for($i = 0; $i < 3; $i++){
echo 'Loop: ' . $loop . ' Form: ' . $i . '<br>';
}

$loop++;
}
?>
که می توانید در قسمت echo خروجی HTML مد نظرتان را جایگزین کنید.
نویسنده: علی
۱۵:۵۷ ۱۳۹۹/۰۳/۲۰
با دریافت دو عدد از ورودی و استفاده از روش تنصیف معادله x+sinx برابر صفر را پیدا کنید
پاسخ: 
برای این مسئله ریاضی متاسفانه تابع آماده ای در اختیار نداریم.
نویسنده: احمد
۱۰:۳۲ ۱۳۹۹/۰۷/۱۶
با عرض سلام ببخشید چطوری میتونم یه قسمت از تگ ها رو داخل حلقه وایل رد کنم دوباره تگ های بعدی داخل حلقه قرار بگیرن وقتی رادیکال حلقه رو میبندم نمیخوام همه تگ ها داخل حلقه قرار بگیرن ولی نمیدونم به چه صورت هست ممنون از زحمات شما
پاسخ: 
دقیقا مشخص نیست ساختار کدها و خروجی مد نظر به چه شکلی است اما در حالت کلی می توانیم تگ ها را خارج از حلقه خروجی دهیم، به فرض:
<div>
<?php
$count = 0;
echo '<p>';
while($count < 10){
echo '<span></span>';
}
echo '</p>';
?>
</div>
تگ های HTML داخل و خارج از دستورات PHP قابل تعریف هستند، در صورت نیاز به طراحی ساختار پیچیده تر لطفا با نمونه کد مشکل را مطرح کنید تا امکان راهنمایی بیشتر میسر باشد.
نویسنده: احمد
۱۱:۱۹ ۱۳۹۹/۰۷/۱۶
با عرض سلام مجدد ساختار کلی دستورم به این صورت هست.
<?php
$sql="select * from mahsool";
$stmt = $db->prepare($sql);
$stmt->execute();

$html_exclude = '<div class="1">salam</div>
<div class="2">kdhk</div>
<div class="3">kjhhg</div>';

$is_html_need = true;

while($result=$stmt->fetch(PDO::FETCH_ASSOC)) {
$id = $result['id'];
$title = $result['title'];
$img = $result['img'];

echo '<li class="product product-7 text-center"></li>
<div class="product-media">
<a href="product.php?id=' . $id . '">
<img class="ax" src="' . $img . '"
</a>
</div>';

if($is_html_need == true){
echo $html_exclude;
$is_html_need = false;
}

echo '<li class="product product-7 text-center"></li>
<div class="product-media">
<a href="product.php?id=' . $id . '">
<img class="ax" src="' . $img . '"
</a>
</div>';
}

//echo $html_exclude;
?>
بعد از حلقه وایل اون دیو کلاس 1 و 2 و 3 میخواهم در حلقه قرار نگیرند ولی دوباره از تگ li داخل حلقه قرار بگیرن . ممنون از زحمات شما
پاسخ: 
با تعریف قسمت خارج از حلقه به صورت یک متغیر و تعریف یک متغیر کنترلی دیگر می توانیم خروجی را مدیریت کنیم، به طور مثال ما کدهای بالا را بر همین مبنا ویرایش کردیم و مقدار HTML خارج از حلقه صرفا در شرایطی در دور while چاپ می شود که متغیر فرضی is_html_need برابر true باشد، در دور اول این متغیر برابر true است و یک بار مقدار چاپ می شود (می توانیم مقدار پیش فرض را false در نظر بگیریم که در اینصورت چاپ نمی شود)، اگر هم بخواهیم مقادیر خارج از حلقه چاپ شوند که با دستور echo ساده می توانیم این کار را انجام دهیم، اگر حالت دیگری مد نظر است لطفا نمونه خروجی مورد انتظار از کد بالا را درج کنید تا بهتر راهنمایی کنیم.
نویسنده: امیرحسین
۰۲:۲۲ ۱۳۹۹/۰۷/۲۰
سلام خسته نباشید.
میخوام از این تابع برای بدست آوردن لیست های متفاوت استفاده کنم.
مثلا یه آرایه داشته باشم.
442,521,14,34,84,19,20,17
یا
ali,reza,hossein,mohhamad,hesam
میخوام به ترتیب به تعداد مشخصی کنار هم با فاصله چیده بشه.
مثلا اگه 3 تایی باشه.
19 432 521
19 432 84
19 432 34
19 432 20
و ...
432 84 17
امیدوارم کمکم کنید. ممنون
پاسخ: 
تجزیه آرایه و خروجی به شکل مد نظرتان نیازمند طراحی الگوریتم نسبتا پیچیده ای است که قاعدتا زمانبر خواهد بود، در صورتی که زمان انجام کار برایتان مهم نیست لطفا اعلام کنید تا تابع در زمان مقتضی (حداقل چند روز آتی) نوشته شود و از طریق ایمیل اطلاع رسانی گردد.
نویسنده: امیرحسین
۱۳:۵۴ ۱۳۹۹/۰۷/۲۰
سلام. نه محدودیت زمانی وجود نداره.
نویسنده: امیرحسین
۱۶:۴۰ ۱۳۹۹/۰۷/۲۰
<?php
$chars = array('AAA','BBB','CCC','DDD','FFF','EEE');
$words = [];
foreach ($chars as $char1) {
foreach ($chars as $char2) {
foreach ($chars as $char3) {
foreach ($chars as $char4) {
echo $words[] = $char1 .' '. $char2 .' '. $char3 .' '. $char4.'<br>';
}
}
}
}
موفق شدم اینو پیدا کنم.
ولی میخوام کلمات تکراری داخلشون نباشه.
مثال AAA فقط یک بار در اون خط وجود داشته باشه.
پاسخ: 
این کد با الگوی مد نظرتان متفاوت است، نمونه خروجی که درج کرده اید نیاز به ترکیب پیچیده تری دارد، کد زیر به هر تعداد که آرایه ورودی عضو داشته باشد خروجی ایجاد می کند (دقیقا منطبق بر الگوی شما نیست اما به نظر مشکل را رفع می کند):
<?php
$array = array(442, 521, 14);

function arrayCombos($array) {
if(count($array) <= 1 ) {
$result = $array;
} else{
$result = array();

for($i = 0; $i < count($array); ++$i) {
$first = $array[$i];
$remaining = array();

for($j = 0; $j < count($array); ++$j) {
if ( $i <> $j ) $remaining[] = $array[$j];
}

$combos = arrayCombos($remaining);

for($j = 0; $j < count($combos); ++$j) {
$result[] = $first . ' ' . $combos[$j];
}
}
}

return $result;
}

//print_r(arrayCombos($array));
$array = arrayCombos($array);
foreach($array as $key => $value){
echo $value . '<br>';
}
?>
نویسنده: امیرحسین
۰۵:۲۳ ۱۳۹۹/۰۷/۲۱
عالی بود. خیلی ممنونم. ولی هر چند کلمه داخل آرایه داشته باشم به همون میزان خروجی گرفته میشه. من اگه 10 کلمه در آرایه داشته باشم و بخوام 4 کلمه خروجی بگیرم. نمیشهه. جایی میتونم محدودیت خروجی تعریف کنم.
بازم ممنون که تا اینجا کمکم کردی.
نویسنده: امیرحسین
۰۵:۴۳ ۱۳۹۹/۰۷/۲۱
خب متوجه شدم. که باید خط اول عدد فانکشن رو تغییر بدم.
بسته به تعداد آرایه
if(count($array) <=1 )
به
if(count($array) <=3 ) {
به
if(count($array) <=7 ) {
یا هر عدد دیگه تغییر بدم جوابمو میگیرم.
دوست عزیز ممنون که برام وقت گذاشتی و بهم کمک کردی.
پاسخ: 
خواهش، خوشحالیم که مشکل رفع شد.
نویسنده: فایز پور جهانبخشی
۰۵:۵۶ ۱۳۹۹/۰۷/۲۸
سلام
اگر بخواهیم برنامه ای که داخل متلب نوشتیم تا یک ثانیه اجرا شود و بعد از ثانیه اول در حالت خطا که به هر کدام از ماتریس های حالت سالم یک سطر و ستون اضافه شده است رو اجرا کنیم . حلقه این برنامه چطور نوشته میشه؟ چون حالت خطا به ماتریس های حالت اضافه شده آلارم ناهمسانی اندازه ماتریس ها را میده چطور میشه مشکل را حل کرد؟
با تشکر
پاسخ: 
آموزش در خصوص PHP است، برای MATLAB لطفا به سایت های مرتبط مراجعه کنید.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





9 × 3
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form کوثر رحیمی
در:
سلام ا ز راهنماییتون ممنونم من تازه وبلاگم رو درست کردم ۱۲ سالمه هر کاری می کنم فیلم در اون قرار نمیگیره همش این خطا...
۱۳۹۹/۱۰/۲۹

form متین
در:
سلام و خسته نباشید من بخوام داده ای که از قبل موجوده رو با متد پست به یک فایل ارسال کنم چجور میشه؟ یعنی...
۱۳۹۹/۱۰/۲۷

form روشنا
در:
سلام ما یه وبلاگ گروهی داریم مختص املاک فایل های جدید و حتی قالب جدید اصلا اعمال نمیشه . حتی راهنمایی که کرده...
۱۳۹۹/۱۰/۲۷

form علی
در:
من در یک سایت سازی سایت ساختم یه بخش داره به نام اسکریپت دلخواه می خوام یه اسکریپتی بذارم که مثلا یه موسیقی وقتی کاربر...
۱۳۹۹/۱۰/۲۷

form امیرحسین
در:
بله استاد خیلی ممنون، نمیدونستم خودش Optimize رو انجام میده در کل من بعد از ایندکس گذاری ها همیشه سعی کردم جوری که با...
۱۳۹۹/۱۰/۲۶

form امیرحسین
در:
ُسلام وقت بخیر این کووری هم چون اول قسمت WHERE انجام میشه بعد قسمت ON پس این کووری هم با حالت کووری قبلی برابره
۱۳۹۹/۱۰/۲۶

form امیرحسین
در:
سلام استاد وقت بخیر ممنون از پاسخ گویی های قبلی یه سوال دیگه داشتم: این هم هیچ مشکلی نداره و کار میکنه، ایا...
۱۳۹۹/۱۰/۲۵

form محمد بیدل بازه
در:
سلام خسته نباشید ببخشید من توی یک قسمت سایتم تصویری دارم و میخوام سمت راست اون تصویر متن بنویسم ولی نمیشه تا متن رو...
۱۳۹۹/۱۰/۲۵

form سلام
در:
و اینکه یه تگ خوب برای فونت معرفی کنید و یه تگ دیگه که متن رو (تیتر مطلب (تست)) در ادامش بنویسه نه اینکه...
۱۳۹۹/۱۰/۲۴

form سلام
در:
سلام وبسایتم را نگاه کنید از چه تگی استفاده کنم تا فاصله بین تیتر مطلب جدید را کاهش دهم؟ (از خطی به خط...
۱۳۹۹/۱۰/۲۴

form وطن
در:
سلام. خسته نباشید. خیلی گشتم درباره یک خطا یا ایراد فنی که چند روز هست در سایت نوشته شده با پی اچ پی (اسکریپت اولوشن)...
۱۳۹۹/۱۰/۲۴

form حورارمی
در:
سلام. من هنوز نمیدونم تو تنظیمات باید کجا رو بگردم تا قالب وبلاگم رو با عکس مورد علاقه ام تغییر بدم. یا نمیتونم...
۱۳۹۹/۱۰/۲۳

form راشد
در:
این روش خیلی طولانیه در فروشگاه من یک برنامه گرفتم که یه عکس توش اپلود کن بهت یک لینک میده در ظرف چند ثانیه و...
۱۳۹۹/۱۰/۲۱

form باسلام
در:
باسلام خدمت شما عزیز زحمت کش، من مطلب را تا آخر مطالعه کردم. من وبلاگم بازدیدای زیادی داره چون تمام مطالبش رو خودم مینویسم و...
۱۳۹۹/۱۰/۲۱

form محمود
در:
سلام و عرض ادب من در سایتم یک قسمت تب ایجاد کردم، متن ها را که در تب می نویسم پاراگراف بندی نمی شوند....
۱۳۹۹/۱۰/۲۱
form علی آقابیگی
در:
سلام خسته نباشید ببخشید من می خواستم کد جدید در وبلاگم بزارم بعد اشتباهی رفتم در قسمت ویرایش کدها و بعد بیشتر کدها را پاک...
۱۳۹۹/۱۰/۲۰
form محمد
در:
سلام. من میخوام با جاوا اسکریپت یک کدی بنویسم که وقتی کاربر روی یک دکمه ‏ای کلیک کرد، یک کد تصادفی برای شمارش ارسال...
۱۳۹۹/۱۰/۲۰
form پوریا
در:
سلام خسته نباشید، ممنونم بابت توضیحات خوبتون، یه مشکلی داشتم میخواستم ببینم امکانش هست راهنمایی کنید؟ فرض کنید یه اینطور متنی داریم: ...
۱۳۹۹/۱۰/۱۹
form seyedsobhanmansouri
در:
سلام خسته نباشید من سایتمو طراحی کردم اما به این مشکلات بر میخورم اول اینکه هدر سایتم نمایش داده نمیشه اصلا و بعد...
۱۳۹۹/۱۰/۱۹
form رضا
در:
سلام. ممنون بابت مطالب مفیدتون. این نوع جستجو به سئو سایت لطمه نمیزنه؟؟؟ چون در این مدل جستجو، مقدار impression میره بالا ولی...
۱۳۹۹/۱۰/۱۹
form mahdi
در:
سلام استاد عزیز ، پس بنظرتون بجای وقت گذاشتن برای یادگیری لاراول و وردپرس ، وقت بزارم که عمیق تر php و ساختار mvc...
۱۳۹۹/۱۰/۱۹
form علی
در:
سلام و ممنون بابت وبسایت عالیتون داخل بعضی سایت ها دیدید مثلا یه متنی شروع به تایپ شدن می کنه و وقتی کامل شد...
۱۳۹۹/۱۰/۱۸
form محمد
در:
سلام خدمت شما دوست عزیز سوالم این بود میخاستم چندتا مثال از این تابع و چند تابع دیگه از خودتون رو برام مثال بزنید...
۱۳۹۹/۱۰/۱۸
form محمود رنجبر
در:
سلام برادر مشکل من تو همین سایتی هست که فرستادم وقتی گزینه خانه رو کلیک میکنم و بعد دکمه بک گوشی رو میزنم بالای صفحه...
۱۳۹۹/۱۰/۱۷
form mahdi
در:
سلام استاد عزیز ، بعد از آموزس php با لاراول کار کنیم بهتره ؟
۱۳۹۹/۱۰/۱۶
form رضا
در:
آدرس رو براتون گذاشتم دامنه قبلا روی یه وبلاگ میهن بلاگ بود چند ماه میشه که از میهن بلاگ خداحافظی کردم ولی هنوز که هنوزه...
۱۳۹۹/۱۰/۱۴
form نیلو
در:
سلام... ببخشید بعد طراحی قالب قالب شیشه ایم هست یا نه؟؟؟
۱۳۹۹/۱۰/۱۳
form مجتهدزاده
در:
سلام من یه فرمی طراحی کردم که توش قراره تعداد زیاد (حدود 10 الی 50) فیلد رو تو دیتابیس اینسرت کنم. آیا باید...
۱۳۹۹/۱۰/۰۸
form مجتهدزاده
در:
سلام لطفا راهنمایی بفرمایید که چه زمانی قبل از متغیر @ استفاده می شه و کاربردش چیه؟ با تشکر
۱۳۹۹/۱۰/۰۶
form ali
در:
سلام چجوری میشه با php بازی هوب رو طراحی کرد
۱۳۹۹/۱۰/۰۶
form رضا
در:
سلام ممنون از سایت خوبتون ایکون سایتم رو توی دسکتاپ درست نشون میده ولی تو گوشی مشکل داره طبق اموزش شما هم انجام دادم...
۱۳۹۹/۱۰/۰۶
form فرانک دستان
در:
سلام من خیلی دوست دارم روی وبلاگم کد اهنگ بزارم ولی هیچ کدوم نمی یاد بهم گفتن از این کدها دیگه پشتیبانی نمی شه شما...
۱۳۹۹/۱۰/۰۵
form مصطفی
در:
سلام. عملگر @ چه زمانی قبل از یک متغییر میاد؟
۱۳۹۹/۱۰/۰۵
form سما
در:
سلام من وقتی میزنم روی مشاهده وبلاگ صفحه فیلتر برام میاد و نمیتونم وبلاگمو ببینم
۱۳۹۹/۱۰/۰۵
form مجتبی
در:
سلام من وبلاگ بلاگفا دارم کدها و جاوا استیکرها رو میزارم تو قسمتشون ولی همه ی کدها رو یکطرف وبلاگ نشون میده چطوری سمت...
۱۳۹۹/۱۰/۰۵
form matin asadi
در:
سلام ممنون بابت سایت خوبتو من یه مشکلی دارم می خواستم کدی برای این مثال زیر بنویسم ولی بلد نیستم ممنون میشم کمک کنید. ...
۱۳۹۹/۱۰/۰۲
form sahar1999
در:
سلام وقت بخیر چطور میتونم در برنامه نویسی سی شارپ هنگام ایجاد پایگاه داده ی MySql نام پایگاه داده رو از txetbox دریافت کنم؟
۱۳۹۹/۱۰/۰۱
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.