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 مطالب بیشتر:
» توابع کار با آرایه در PHP - بخش اول
» توابع (Functions) در PHP
» توابع کار با آرایه در PHP - بخش سوم
» عملگرها (Operators) در PHP
» توابع کار با آرایه در PHP - بخش دوم
commentنظرات (۶۱ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: بهار
۱۸:۳۷ ۱۳۹۲/۰۹/۲۶
سلام وبتون محشره! میشه بگید چطور میتونم با حلقه for یک مستطیل توپر درست کنم؟ (در ویژوال بیسیک)
پاسخ: 
لطفا به سایت های مرتبط با موضوع مراجعه کنید، زمینه فعالیت سایت تنها در بخش زبان های وب و Open-source است!
نویسنده: ابوالفضل
۲۲:۵۷ ۱۳۹۲/۱۰/۱۸
سلام اگر بخواهیم اطلاعات به وجود امده توسط حلقه را در یک متغیر ذخیره کنیم باید چه کاری انجام دهیم؟
پاسخ: 
منظورتان از اطلاعات به وجود آمده در حلقه مشخص نیست! حلقه به خودی خود اطلاعاتی تولید نمی کند (و صرفا تا زمانی که دور ادامه دارد، مفسر کدهای آن را پردازش می کند) مگر اینکه درون آن دستوراتی بدین منظور تعریف کنید، لطفا سوالتان را همراه با نمونه کد مطرح نمائید.
نویسنده: ابوالفضل
۱۷:۰۶ ۱۳۹۲/۱۰/۱۹
سلام
ممنون از پاسخ دهی تون
نمونه کد :
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER_SET utf8");
$query="SELECT * FROM `name` ORDER BY `id` DESC LIMIT 300";
$select=mysql_query($query);
while($row=mysql_fetch_array($select)){
$n = explode(' نام خانوادگی ',$row['name']);
echo ''.$row['id'].' '.trim($n[0]).'';
}
همانطور که میدونید این کد خروجی نام های مخاطبان رو میده من میخوام کلیه نام هایی که در این حلقه به وجود میاد در متغیری ذخیره کنم از کد زیر استفاده کردم اما فقط مورد آخری ذخیره شد:
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER_SET utf8");
$query="SELECT * FROM `name` ORDER BY `id` DESC LIMIT 300";
$select=mysql_query($query);
while($row=mysql_fetch_array($select)){
$n = explode(' نام خانوادگي ',$row['name']);
$text = '.$row['id'].' '.trim($n[0]).';
}
می خواستم اطلاعات در متغیر text ذخیره کنم
و سوال دیگه که واسم همین الان که مطالب رو مرور می کردم پیش اومد اینه که:
در زمانی که داریم از دیتابیس اطلاعات را دریافت می کنیم چطوری میشه عدد گذاری کرد ردیف ها رو مانند زیر
1. علی
2. محمد
3. حسن
پاسخ: 
در پاسخ به سوال اول، به نظر کدتان خطای syntax دارد، به هر صورت کافی است به جای = از =. استفاده کنید، مثال:
<?php
$text = null;
while($row=mysql_fetch_array($select)){
$n = explode(' نام خانوادگي ',$row['name']);
$text .= $row['id'].' '.trim($n[0]);
}
echo $text;
?>
در مورد سوال دوم، می توانید مقادیر id را (اگر در دیتابیس وجود دارد) استخراج کنید (کاری که در کدهای بالا انجام داده اید)، یا یک متغییر با مقادیر صفر خارج از حلقه داشته باشید که در هر دور حلقه مقدار آن یک واحد افزایش یابد، مثال:
<?php
$loop = 1;
while($row=mysql_fetch_array($select)){
$id = $loop;
echo $id;
$loop++;
}
?>
نکته: اکستنشن MySQL قدیمی و منسوخ شده، از اکستنشن MySQLi یا PDO استفاده کنید.
نویسنده: ابوالفضل
۱۲:۲۹ ۱۳۹۲/۱۰/۲۰
سلام
بینهایت ازتون سپاسگزارم خیلی بهم کمک کردین ممنونم بابت سایت خیلی عالیتون و توضیحات واضح و دقیقی که می دهید
نویسنده: ابوالفضل
۰۱:۵۲ ۱۳۹۲/۱۱/۱۸
سلام بنده یک حلقه درست کردم با کد زیر:
<?php
while($row=mysql_fetch_array($select)){ ?>
<?php echo htmlspecialchars($item->slug, ENT_NOQUOTES); ?>|
<?php
}
?>
این کد به این صورت خروجی می دهد:
2434|786687|866898|
در صورتی که من می خوام برای اخرین مورد | قرار داده نشود مانند زیر خروجی بدهد کد بالا:
2434|786687|866898
ممنون میشم کمکم کنید
پاسخ: 
نحوه کدنویسی شما خیلی جالب نیست! می توانید به جای استفاده از تگ های مقطع PHP به صورت ساده تری ساختار را تعریف کنید، مثال:
<?php
$result = null;
while($row=mysql_fetch_array($select)){
$result .= htmlspecialchars($item->slug, ENT_NOQUOTES).'|';
}
echo substr($result, 0, -1);
?>
نویسنده: ابوالفضل
۲۱:۵۸ ۱۳۹۲/۱۱/۲۶
سلام استاد
این حلقه foreach نمیشه یه تعداد خاصی ازش خروجی گرفت من کد زیر را دارم تعداد 4300 تا آرایه ، همه رو با هم خروجی میده سرعت لود خیلی پایین اومده
<?php
foreach ($pagesArray as $page) {
if ($page['parent'] != '') {
$parentTitle = returnPageField($page['parent'], "title");
$sort = $parentTitle .' '. $page['title'];
$sort = $parentTitle .' '. $page['title'];
} else {
$sort = $page['title'];
}
$page = array_merge($page, array('sort' => $sort));
$pagesArray_tmp[$count] = $page;
$count++;
}
?>
لطفا کمکم کنید ممنون
پاسخ: 
لطفا ابتدا در زمینه آموزش های مقدماتی تمرین های خود را تکمیل کنید، سپس به مرحله کدنویسی کاربردی بپردازید، تعریف ساختاری که بتوان با آن حلقه foreach را در یک دور مشخص خاتمه داد خیلی پیچیده نیست، کافی است یک متغیر با نام فرضی loop بیرون حلقه تعریف و در هر دور حلقه مقدار آن را افزایش دهید، در حلقه یک دستور شرطی داشته باشید که اگر loop بالاتر از میزان مورد نظر شد، دستور break را اجرا کند.
نویسنده: ابوالفضل
۰۰:۰۶ ۱۳۹۲/۱۱/۲۷
سلام خیلی ممنون لطف کردید فقط ای کاش این مورد را همین جا بیان کرده بودید در بخش حلقه ها آخه توضیحی در این مورد که تعداد دور رو چطوری معین کنیم برای حلقه foreach نبود به هر حال ممنونم کد به صورت زیر شد.
<?php
$count = 0;
foreach ($pagesArray as $page) {
if ($page['parent'] != '') {
$parentTitle = returnPageField($page['parent'], "title");
$sort = $parentTitle .' '. $page['title'];
$sort = $parentTitle .' '. $page['title'];
} else {
$sort = $page['title'];
}
$page = array_merge($page, array('sort' => $sort));
$pagesArray_tmp[$count] = $page;
$count++;

if($count == '30'){
break;
}
}
?>
پاسخ: 
آموزش های سایت در برخی موارد کم و کاستی هایی دارند که در آینده بازنگری خواهند شد، البته مبحث مورد نظر ارتباط مستقیمی به آموزش حاضر ندارد.
نویسنده: ابوالفضل
۱۵:۲۰ ۱۳۹۲/۱۲/۱۰
سلام مجدد این کد منه:
$count = 0;
foreach($doc->getElementsByTagName('item') as $node){
$array = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
);
array_push($xml, $array);

$count++;

if($count == '10'){
break;
}
}
این کد هیچ مشکلی نداره فقط ده مورد اول را لیست می کند در صورتی که من میخوام ده مورد اخر را لیست کند
و چند سوال دیگر:
حجم فایل xml تا چقدر باشد مشکلی ندارد؟؟
آیا میشه به صورت تصادفی هم چند مورد را لیست کرد ؟ مثلا ده تا آیتم ها را به صورت تصادفی نمایش داد؟
ممنون میشم راهنمایی کنید
پاسخ: 
تقریبا تمام موارد مد نظرتان قابل اعمال است، منتها باید تک تک موارد را با کدنویسی تعریف کنید، متاسفانه فرصت کافی برای این کار در اختیار نداریم، صرفا جهت راهنمایی:
- می توانید برای انتخاب از آخر، حلقه for داشته باشید که داخل آن یک متغیر در هر دور یک واحد افزایش یابد، اگر مقدار متغیر به فرض به 495 و بالاتر رسید، خروجی ارسال کنید، حلقه نیز تا 500 ادامه داشته باشد.
برای حالت رندوم می توانید از همین ساختار در یک حلقه 5 عدد تصادفی ایجاد و در یک آرایه ذخیره کنید و در حلقه اصلی عدد دور حلقه را با مقدار موجود در آرایه مقایسه کنید، اگر وجود داشت خروجی ارسال و مقدار آرایه را unset کنید و...
نکته: این راه حل ها صرفا ذهنی و در حد طرح اولیه است، ممکن است در عمل نیاز به تغییراتی داشته باشند که باید خودتان روی آنها بیشتر فکر و کار کنید.
در مورد حجم فایل xml محدودیت یا استاندارد خاصی وجود ندارد، در حدی باید باشد که بارگذاری آن خیلی طول نکشد.
نویسنده: فاطمه
۱۶:۳۸ ۱۳۹۳/۰۲/۲۵
سلام من چه طوری باید با استفاده از دستور while یک تابع را فراخوانی کنم
پاسخ: 
بستگی به هدفتان دارد! به فرض اگر می خواهید خروجی تابع را چاپ کنید، کافی است درون حلقه while هر زمان که نیاز بود، به صورت زیر تابع را استفاده کنید:
echo yourFunction();
یا اگر می خواهید مقداری را به متغیر نسبت دهید، به همین شکل:
$result = yourFunction($argument);
نویسنده: آتنا
۱۲:۱۷ ۱۳۹۳/۰۴/۲۸
سلام
من می خوام یه کد بنویسم که اسم همه افراد را بگیره و نمایش بده، ولی با for یا while که امتحان می کنم فقط یه بار اسم می گیره و چند بار نمایش می ده، باید چی کار کنم؟
پاسخ: 
در قسمت حلقه foreach استفاده از آرایه با مثال توضیح داده شده! از الگوی آن استفاده یا نمونه کدی جهت بررسی به همراه توضیحات دقیق تر درج کنید.
نویسنده: شیری
۰۱:۱۹ ۱۳۹۳/۰۶/۱۳
تعداد رکورد های درج شده در بانک 3 عدد اما هنگام گرفتن خروجی 2 رکورد را فقط نشان میدهد. کد:
<?php 
mysql_connect("localhost","root","");
mysql_select_db("shopdb");
$r=mysql_query("select * from tblcat");
mysql_fetch_assoc($r);
$i=0;

while($row = mysql_fetch_assoc($r))
{
echo"<tr>";
echo"<td>".++$i."</td>";
echo"<td>".$row['catid']."</td>";
echo"<td>".$row['name']."</td>";
echo"<td>----</td>";
echo"</tr>";
}

echo "</table>";
?>
پاسخ: 
تکه کدی که درج کرده اید مورد خاصی را نشان نمی دهد! مشکلتان باید به صورت تست واقعی بررسی شود.
نویسنده: مینو
۱۵:۲۰ ۱۳۹۳/۰۷/۲۲
حلقه بی پایان چه زمانی استفاده می شود
پاسخ: 
تقریبا هیچگاه! مگر اینکه بخواهید کارکرد سیستم یا سرورتان مختل یا احیانا قدرت آن بررسی شود! همچنین در موارد نادری مثل کار با توابع socket.
نویسنده: زهرا
۱۳:۱۳ ۱۳۹۳/۱۰/۰۶
سلام ممنون از سایت عالیتون
یک سوال داشتم
یک کد php میخوام که وقتی جدول ایجاد میکنم تعداد ستون هاش متغیر باشه لطفا راهنمایی کنید
پاسخ: 
سوالتان واضح نیست! لطفا منظورتان را دقیقتر توضیح دهید.
نویسنده: سمیه
۰۱:۰۲ ۱۳۹۳/۱۰/۳۰
سلام،
قطعه کد زیر را برای محاسبه فاکتوریل اعداد 1 تا 5 نوشته ام، اما با خطا روبرو میشوم.. اگر امکان دارد راهنمایی کنید
با سپاس
<?php
function factorial($number){
if($number < 2){
return 1;
}
else{
return ($number * factorial($number-1));
}
}
for($j=1;$j<=5;$j++)
echo "factoriel $j = ".factorial($j).'<br>';
?>
پاسخ: 
کد بالا اصلاح شد.
نویسنده: علی
۱۰:۳۷ ۱۳۹۳/۱۱/۱۵
با سلام و خسته نباشید قطعه کد زیر لیست کالاها رو نمایش می دهد
<select name="type" class="search">
<?php
foreach($usertype as $row){
if($row['price'] > 0){
echo "<option value=".$row['id'].">".$row['title']."</option>";
}
}
?>
</select>
من می خوام فقط کالاهایی را به کاربر نمایش بدهد که قیمت آنها بیشتر از 0 باشد به نظر شما چطور کد بالا را تکمیل کنم من شرط if گذاشتم ولی جواب نداد در ضمن من یک ستون قیمت هم دارم به نام price ممنون میشم راهنمایی کنید اگر نیاز هست از دستور دیگری استفاده کنم ممنون میشم راهنمایی کنید
پاسخ: 
کد بالا ویرایش شد.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





1 × 6
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form عبدالمالت ریالی
در:
سلام علیک میشه از چند فونت در یک صفحه html استفاده کرد.؟
۱۳۹۹/۰۸/۰۱

form مبینا
در:
سلام من برنامه ای میخواستم که داخل ارایه 5 رنگ قرار گرفته باشه. و با استفاده از حلقه for این یک متنو به اون پنج...
۱۳۹۹/۰۸/۰۱

form mohadeseh
در:
ممنون از راهنماییتون مشکلم حل شد
۱۳۹۹/۰۷/۲۸

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

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

form mohadeseh
در:
الان کد من که توی تگ <head> گزاشتم میخواستم بدونم ایا امکانش هست که توی تگ link که ایکون رو باهاش اوردم بتونم...
۱۳۹۹/۰۷/۲۷

form mohadeseh
در:
سلام ببخشید لطفا راهنمایی کنید که چجوری title برای favicon در html بزارم؟ جوری که وقتی موس روی icon قرار بگیره متن...
۱۳۹۹/۰۷/۲۷

form ryomaechizen
در:
سلام. اگه حافظه وب پر بشه و مجبورا عکسا کپی باشن چطور باید مشکل بارگزاریشون حل بشه؟
۱۳۹۹/۰۷/۲۶

form رونا
در:
پرونده فرستاده شده نمی‌تواند به wp-content/uploads/2020/10 برود. سلام این ارور برای چی رخ می ده
۱۳۹۹/۰۷/۲۵

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

form سینا
در:
چگونه میتوانیم با استفاده از HTML فرمول شیمیایی مواد را بنویسیم؟ با عدد اتمی، جرمی و بار اتمی
۱۳۹۹/۰۷/۲۱

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

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

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

form سعادتی
در:
سلام کاش روش برطرف کردن این بهم ریختگی رو هم توضیح میدادید. ممنون
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
موفق شدم اینو پیدا کنم. ولی میخوام کلمات تکراری داخلشون نباشه. مثال AAA فقط یک بار در اون خط وجود داشته باشه.
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
سلام. نه محدودیت زمانی وجود نداره.
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
سلام خسته نباشید. میخوام از این تابع برای بدست آوردن لیست های متفاوت استفاده کنم. مثلا یه آرایه داشته باشم. امیدوارم کمکم...
۱۳۹۹/۰۷/۲۰
form ابوالفضل
در:
سلام وقتتون بخیر من میخوام یه افزونه برای مرورگر کروم طراحی کنم و میخوام یه متنی رو هر سری از سایت دریافت کنه و...
۱۳۹۹/۰۷/۲۰
form mahdi
در:
سلام چطور می تونم از ip خارجی استفاده کنم؟ برای دریافت لانچر میخام. مرسی
۱۳۹۹/۰۷/۱۹
form احسان عباسی
در:
با سلام و تشکر از سایت خوبتون من یه کد تعریف کردم که در بورس ایران سهم مدنظرمو بیاره .. میخواستم ببینم امکانش هست دستوری...
۱۳۹۹/۰۷/۱۷
form شبنم
در:
سلام وقتتون بخیر، ببخشید از کلمه event یا e دقیقا چه زمانی توی فانکشن استفاده میکنیم؟
۱۳۹۹/۰۷/۱۷
form احمد
در:
با عرض سلام مجدد ساختار کلی دستورم به این صورت هست. بعد از حلقه وایل اون دیو کلاس 1 و 2 و 3 میخواهم...
۱۳۹۹/۰۷/۱۶
form احمد
در:
با عرض سلام ببخشید چطوری میتونم یه قسمت از تگ ها رو داخل حلقه وایل رد کنم دوباره تگ های بعدی داخل حلقه قرار بگیرن...
۱۳۹۹/۰۷/۱۶
form ابوالفضل
در:
سلام واقعا من خیلی گشتم تا بتونم این آموزش رو پیدا کنم چون واقعا نمی دونستم چی بنویسم تا یک رتبه بندی برای نتایج جستجو...
۱۳۹۹/۰۷/۱۵
form mahtab
در:
سلام وقتتون بخیر ببخشید میشه بفرمایید چجوری کلیپ رو بزاریم وبلاگ ؟؟ بی زحمت کامل بفرمایین ممنون و متشکر
۱۳۹۹/۰۷/۱۴
form Saeid Azari
در:
سلام ببخشید اگه امکانش هست سوال منو جواب بدید یکم گیج شدم...من یک کد html دارم که باید یک سایت درست کنم و ان را...
۱۳۹۹/۰۷/۱۳
form ابوالفضل
در:
سلام یک سوال دارم چجوری یک متنی که درون تگ td هست و بعد تگ br هست (تگ br درون تگ td است) رو...
۱۳۹۹/۰۷/۱۳
form parnian
در:
با سلام با توجه به این که این مطلب در سال 91 نوشته شده ایا تغیری هم کرده؟ مثلا استفاده و مهم بودن تگ های...
۱۳۹۹/۰۷/۱۳
form fahimeh
در:
سلام من دارم پروژه واسه دانشگاه مینویسم طراحی سایتو کردم برای کار با پایگاه داده دستور insert و delete کار میکنه ولی...
۱۳۹۹/۰۷/۱۲
form امین
در:
با عرض سلام ببخشید یه فرم دارم اخر فرمم یه دکمه دارم میخواستم بدونم چطوری باید بعد از کلیک کردن دکمه به صفحه دیگه انتقال...
۱۳۹۹/۰۷/۱۱
form محسن
در:
سلام من از فرم ساز گرویتی استفاده میکنم آیا امکان استفاده همچین چیزی رو میتونم داخلش داشته باشم آیا کدی داره که در قسمت...
۱۳۹۹/۰۷/۱۱
form مالکی
در:
چرا وبلاگم بالا نمی یاد
۱۳۹۹/۰۷/۰۹
form احمد
در:
با عرض سلام مجدد و خسته نباشید ببخشید نمونه کد رو اگر امکانش هست نگاه کنید که چطوری این متغییری رو که بدست اوردم در...
۱۳۹۹/۰۷/۰۹
form الناز
در:
سلام وقتتون بخیر. چطور میشه برنامه ای رو در php نوشت که کدملی رو تبدیل به شماره دانشجویی کنه اگه برام بنویسید ممنون میشم.
۱۳۹۹/۰۷/۰۹
form محمد
در:
سلام من میخواستم بدونم چه طوری میشه بدون اینکه از کاربر بپرسی که میخواهد از حساب خروج پیدا کند خود سایت بفهمد که کاربر از...
۱۳۹۹/۰۷/۰۹
form احمد
در:
با سلام ببخشید چطوری باید در جکوری از یک متغییر در صفحات دیگه استفاده کنم مثال دو عدد را باهم جمع کردم و ریختم داخل...
۱۳۹۹/۰۷/۰۹
form مهسا
در:
سلام و خسته نباشید مشکلی برای وبلاگ من پیش اومده موقع ورود بهم پیام میده وبلاگ داره بروز رسانی میشه و بعدا وارد وبلاگ شوید...
۱۳۹۹/۰۷/۰۸
form Moshtagh
در:
سلام و خسته نباشید بنده چند روزه که وقتی اطلاعات ورود به وبلاگم رو وارد تیترها و کلیک میکنم با چنین پاسخی مواجه میشم...
۱۳۹۹/۰۷/۰۸
form mahtab
در:
سلام خسته نباشین ببخشید چرا بلاگفا باز نمیکنه ؟؟؟ میرم مدیریت وبلاگ نه تو بروز شده ها وبی هستم نه هم که...
۱۳۹۹/۰۷/۰۷
form جواد
در:
سلام و عرض ادب. سایت من هک شده و یک کد ریدایرکت تو دیتابیس هاستم بارگزاری شده که آخر همه پست ها تو...
۱۳۹۹/۰۷/۰۷
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.