parsgreen.com
article

کار با switch و case در php

php-switch-case

طبق روالِ پدیدآورندگان زبان های برنامه نویسی از جمله php، همیشه قوانین خاصی برای هر زبان تعریف می شود (که به آن syntax یا دستورالعمل می گویند) و کد نوشته شده توسط کاربران طبق آن تفسیر شده، خروجی داده می شود یا عملیات خاصی صورت می گیرد، به جرات می توان گفت خیلی از زبان های برنامه نویسی از بسیاری جهات مشابه هم هستند و تفاوتهای آنها بیشتر در جزئیات و شیوه نگارش دستوراتشان است، با ذکر این مقدمه کوتاه می خواهیم به ادامه آموزش مقدماتی php با بحث switch و case بپردازیم، با این امید که اطلاعات ارائه شده مخصوصا برای دوستانی که تازه شروع به یادگیری php کرده اند یا علاقمند هستند مباحث را دنبال کنند، مفید واقع شود.

کاربرد دستور switch در php چیست؟


همانطور که از نام switch (به معنی تعویض کردن) پیداست، از آن برای انتخاب چند مورد (case) مختلف با توجه به مقادیری که مقایسه می شوند، استفاده می کنند، البته گاهی به جای switch و case از if و elseif هم استفاده می کنند، ولی فلسفه پیدایش این دو از هم جدا است و در کدنویسی های پیشرفته کارکردی متمایز دارند؛ اگر بخواهیم نحوه کاربرد switch و case در php را با یک مثال توضیح دهیم، می توان کتابخانه ای را فرض کرد که با توجه به درخواست شما (Statement یا دستور شما) از بین کتابهای (case های) موجود، یک مورد را انتخاب (switch) کرده و به شما تحویل می دهد.

شیوه نگارش یا syntax دستور switch در php


شیوه نگارش یا syntax دستور switch در php بی شباهت به جاوا اسکریپت نیست، مانند جاوا اسکریپت یک مقدار برای مقایسه به switch اختصاص می یابد و از بین case های موجود یک مورد یا بعضا بیشتر انتخاب می شود، به مثال زیر توجه کنید.
<?php
$statement = "Iran";
switch ($statement){
    case "Iran":
    echo "کشور کاربر: $statement";
    break;
    case "Other":
    echo "user country: $statement";
    break;
}
?>
توضیح:
- در مثال بالا ابتدا متغیر فرضی statement برابر Iran قرار گرفته است.
- سپس در دستور switch مقادیر متغیر statement به عنوان یکی از case ها مقایسه می شود و هر کدام که مقدار آن برابر بود، به خروجی داده می شود.
- قسمت مربوط به break با true شدن هر case، باعث پایان جستجوی switch در موارد خود می شود، در واقع وقتی switch مقادیری مشابه متغیر statement پیدا می کند، case آن true شده و قسمت مربوط به break به جستجو خاتمه می دهد.
- طبق کد بالا خروجی می شود: کشور کاربر: Iran

استفاده از default case در دستور switch


حال با توجه به مثال، فرض کنید هیچ کدام از case های ما با مقادیر متغیر statement همخوانی نداشته باشند، ممکن است در این صورت بخواهیم به کاربر پیامی نشان دهیم یا به او بگوییم که کشور خود را در فیلد مربوط وارد کند و یا هر چیزی که نیاز به یک مقدار پیش فرض دارد؛ برای این منظور از ظرفیت دیگری در switch به نام default case یا مورد پیش فرض استفاده می کنیم، به مثال زیر توجه کنید.
<?php
$statement = "unknown";
switch ($statement){
    case "Iran":
    echo "کشور کاربر: $statement";
    break;
    case "Other":
    echo "user country: $statement";
    break;
    default:
    echo "please fill out your country field";
}
?>
توضیح:
- با توجه به مثال بالا، چون مقدار متغیر statement برابر unknown است و هیچ کدام از case ها چنین مقداری ندارند، پس قسمت مربوط به default اجراء می شود.
- دقت کنید که php بیشتر یک زبان داینامیک است تا استاتیک، یعنی داده ها و خروجی ها با توجه به شرایط و مقادیر متفاوت، مختلف خواهند بود، در مثال ها صرفا جهت کمک به آموزش مطلب، از متغیر های استاتیک استفاده شده است، لذا این مقادیر می توانند مثلا با توجه به IP کاربر یا نام او و یا هرآنچه که به عنوان یک متغیر می تواند تعریف شود، قابل تغییر باشد که این بستگی به نیاز و هدف شما دارد (در آینده در این رابطه بیشتر خواهیم گفت).
sectionدسته بندی: آموزش مقدماتی » PHP
related مطالب بیشتر:
» توابع کار با آرایه در PHP - بخش سوم
» آشنایی با برنامه نویسی به زبان PHP
» توابع (Functions) در php
» آشنایی و کار با متغیر ها (Variables) در php
» دستورات شرطی if و else در php
commentنظرات (۹ یادداشت برای این مطلب ارسال شده است)
نویسنده: مرسده
زمان: ۱۳:۱۵:۱۵ - تاریخ: ۱۳۹۲/۰۵/۱۱
با سلام من می خوام 1 فاکتور فروش ایجاد کنم که مثلا برای کالایی با تعداد 1-10 شامل 3% تخفیف برای 11-20 شامل 5% تخفیف و ... بشه با Switch چطور میتونم این رو بنویسم. نمیدونم سوییچ برای مقادیر میانی چطور عمل می کنه. و آیا غیر از سوییچ هم راه دیگه ای هست؟
پاسخ: 
سلام
به نظر باید از دستورات شرطی به جای switch استفاده کنید، مثال:
$count = 10;
$discount = 0;
if($count <= 10){
$discount = 3;
}
elseif($count <= 20){
$discount = 5;
}
نویسنده: خلیل
زمان: ۰۲:۰۴:۴۰ - تاریخ: ۱۳۹۲/۰۷/۲۸
سلام خسته نباشین
اول از همه ممنون از مطالب زیبا و خوبتون .
من یه سوال همش تو ذهنم هست گفتم که من مبتدی هستم و از اول این اموزش ها تا اینجا همه مطالب رو خوندم بصورت ساده و جدا جدا مطرح می کنم.
اول این که برای مثال من کد html رو نوشتم و text را با پسوند html ذخیره کردم . بعد css رو در text جدید نوشتم و با پسوند css ذخیره کردم و جاوا رو هم مثل بقیه با پسوند js و php رو با پسون خودش و...... البته این سوال ذهنی من هست ولی در مورد جاوا و پی اچ پی بیشتر صدق میکنه .
این فایل های ذخیره شده را باید در کجا ذخیره کنم مثلا اپلود کنم در سایتم در کدام قسمت سایتم باشه و این که با کدام کد جاوا یا پی اچ پی رو در text , html به کار بگیرم. در این باره اگه راهنمایی کلی و به زبان ساده اموزش بدین خیلی ممنون میشم . یه سوال دیگه این هست که میشه css رو هم با این روند php , js استفاده کرد یعنی انها را جدا گانه نوشت و با یک لینک در text , html استفاده کرد . من فقط مشکل اساسی که الان دارم در همین رابطه هست . ممنونم اگه کمکم کنید . البته سوالات خیلی زیادی برام پیش امده ولی چون تا اخرین مطالب نخوندم نمیپرسم . فقط این بار سوال کردم چون خیلی ذهنم رو درگیر کرده . خیلی ممنون از زحماتتون .
پاسخ: 
سلام
درک دقیق نحوه رابطه زبان های وب با هم نیاز به کمی تمرین و تکرار بیشتر و گذشت زمان دارد، اما جهت راهنمایی:
- کدهای JavaScript و CSS را می توانید به صورت فایل خارجی یا به صورت کدهای درونی در صفحات HTML استفاده کنید (اینها در سمت کاربر و مرورگر اجرا می شوند).
- کدهای PHP برای اجرا باید در یک فایل با پسوند php ذخیره شوند و نمی توانید به صورت مستقیم در فایل HTML آن را وارد کنید، اما برعکس در یک فایل PHP می توانید در میان دستورات، از HTML استفاده کنید، باید توجه کنید که PHP یک زبان سمت سرور است، در سرور اجرا شده و صرفا خروجی به مرورگر ارسال می کند، این خروجی معمولا به صورت کدهای HTML است و لذا هرآنچه در HTML قابل استفاده باشد را می توان با PHP چاپ کرد.
- اینکه محل ذخیره سازی و قرارگیری فایل ها در هاست در کجا باشد بستگی به نحوه تعریف ساختار سایت و ارتباط فایل ها با هم دارد، چند نمونه CMS رایگان را بررسی کنید تا تجربه بیشتری در این خصوص کسب کنید.
نویسنده: خلیل
زمان: ۲۰:۳۱:۰۶ - تاریخ: ۱۳۹۲/۰۷/۲۸
خیلی ممنون از راهنمای هاتون .
نویسنده: رسول مطوری
زمان: ۱۵:۱۶:۵۰ - تاریخ: ۱۳۹۴/۰۴/۰۸
درود !
خسته نباشید ...
ممنون میشم من رو راهنمایی بفرمایید !
استفاده از case خیلی خوبه ولی وجود case های زیاد در شرط تاثیری هم روی سرعت لود و اجرا کد داره؟
امکانش هست که بشه شروط رو خلاصه تر کرد ؟
مثلا کد زیر :
<?php 
switch($sk['timeline']['degree']) {
case "1":
echo 'بی سواد';
break;
case "2":
echo 'دبستان';
break;
case "3":
echo 'سیکل';
break;
case "4":
echo 'دیپلم';
break;
case "5":
echo 'دانشجو';
break;
case "6":
echo 'فوق دیپلم';
break;
case "7":
echo 'لیسانس';
break;
case "8":
echo 'کارشناسی ارشد';
break;
case "9":
echo 'دکتری';
break;
}
?>
موردی نداره، ولی اگر بخوایم بیش از 50 case قرار بدیم نتیجه منفی نخواهد داشت ؟ چون در کدهای بالا، من اعداد 0 تا 9 رو از دیتابیس فراخوانی میکنم ، فکر میکنم درخواست های زیاد (مثلا کد بالا برای 50 نفر همزمان اجرا بشه) قطعا سایت رو دچار مشکل میکنه ...
تشکر ...
پاسخ: 
سلام
اغلب در برنامه نویسی برای رسیدن به یک مقصود روش های زیادی وجود دارد که انتخاب بهترین آنها به لحاظ افزایش خوانایی کدها در مراجعات بعدی، کوتاه تر شدن دستورات، بهبود سرعت پردازش و... نکته مهمی است، در مورد مثال شما باید ببینید آیا روش جایگزینی وجود دارد که همان هدف را پوشش دهد، پاسخ این سوال در صورتی که صرفا قصد استفاده از دستور echo را داشته باشید مثبت است و با آرایه می توان همان کار را انجام داد:
$array = array(
"1" => "بی سواد",
"2" => "دبستان",
"3" => "سیکل",
);
echo $array[$sk['timeline']['degree']];
البته به دلیل استفاده از break در دستور switch، پس از اجرای یک case، تفسیر ادامه کدها انجام نمی شود و این باعث افزایش سرعت خواهد شد (البته اختلاف در اینگونه موارد در حد میلی ثانیه و شاید هم کمتر و قابل اغماض است، اما به دلایل دیگر مانند کوتاه شدن دستورات شاید استفاده از آرایه ارجحیت دارد).
نویسنده: رسول مطوری
زمان: ۰۲:۲۳:۵۰ - تاریخ: ۱۳۹۴/۰۴/۰۹
درود !
خیلی ممنون بابت راهنمایی؛ خسته نباشید واقعا (:
تشکر ..
نویسنده: محمد
زمان: ۱۴:۰۶:۲۹ - تاریخ: ۱۳۹۴/۰۹/۲۸
سلام
امکان این هست که از case ها دوبار استفاده کنیم؟
مثلا در if میشه اینطوری شرط گذاشت:
<?php
$webgoo='test';
if($webgoo == 'test' OR $webgoo == 'te_st'){
echo 'Ok';
}elseif($webgoo == 'salam'){
echo 'salam';
}else{
echo 'error';
};
?>
مثلا می خوام عین اون شرط اول از case استفاده کنم میشه چنین چیزی؟ یعنی در یک کیس دو ورودی بررسی کنیم
یه سوال:
استفاده از elseif می تونه باعث افزایش سرعت اجرا شدن شرط ها بشه؟
سرعت کدوم بیشتره switch یا if و else ؟
ممنونم از شما
پاسخ: 
سلام
- برای اجرای یک عملیات با برقراری دو case می توان دستور را به این شکل نوشت:
<?php
$var = 0;
switch($var){
case 0:
case 1:
echo '0 or 1!';
break;
case 2:
echo '2!';
break;
}
?>
- استفاده از elseif اگر منجر به اجرا نشدن پردازش های غیر ضروری شود، قاعدتا به بهبود پردازش کل کار و در نتیجه افزایش سرعت کمک می کند، منظور از پردازش های غیر ضروری مواردی است که شرط (محتوای درون elseif) آنها برقرار نیست و در نتیجه نیازی به بررسی توسط مفسر ندارند، دستور switch و if و else تفاوت محسوسی به لحاظ سرعت ندارند و هر دو جزء دستورات اصلی و پر استفاده هستند، دلیل انتخاب یکی از حالت ها بیشتر به هدف و نیاز کار بر می گردد، به فرض اگر تعداد موارد مشابه زیاد باشد یا یک متغیر، مقادیر متعدد داشته باشد، اغلب از switch case استفاده می کنیم، اما برای تعیین شرط های اصلی یا جدا کردن بخش های مختلف یک برنامه از دستورات if و... استفاده می شود.
نکته: اغلب با استفاده از هر دو روش می توان نتیجه یکسان بدست آورد، اما به مرور متوجه خواهید شد که برای نوشتن برنامه هایی با کدنویسی خوانا تر، کدام روش در کجا مناسب تر است!
نویسنده: محمد
زمان: ۱۴:۵۹:۱۱ - تاریخ: ۱۳۹۴/۰۹/۳۰
سلام
ممنون از جوابتون، عالی بود
می خواستم بدونم اگر کدهای php رو تو یک خط بنویسیم سرعتش بیشتره یا در خط های مختلف؟
مثلا اگر کل اسکریپت در یک خط باشه سرعت بیشتری داره یا مثلا همون اسکریپت اگر در 1000 خط باشه
فرقی دارن با هم اصلا؟
پاسخ: 
سلام
حذف فاصله های خالی صرفا کمی حجم کلی فایل را کاهش می دهد و تاثیر چندانی بر روی سرعت پردازش ندارد، به نظر بهترین حالت رعایت فرم متداول در کدنویسی است، به نحوی که نه کدنویسی (از دید انسان) ناخوانا شود نه اینکه فضاهای غیرضروری و غیرمعمول در کدها باشد، البته برای مواردی که به فرض برنامه نسخه فروشی است و نمی خواهید سورس آن به راحتی توسط دیگران برداشت یا تغییر داده شود، حذف فضاهای خالی مشکلی ایجاد نمی کند!
نویسنده: محمد
زمان: ۱۶:۴۰:۳۷ - تاریخ: ۱۳۹۴/۱۰/۰۲
سلام بازم خسته نباشید ممنونم ازینکه جواب های کامل ارسال می کنید.
یه سوال درمورد سرعت:
آیا استفاده زیاد از تابع str_replace باعث کندی سرعت میشه؟
حالا اگر برای کم استفاده کردن از تابع str_replace تمام موارد رو در دو array ذخیره کنیم و در یک str_replace عمل جایگزینی رو انجام بدیم آیا باعث افزایش سرعت میشه؟
میشه در این مورد هم راهنمایی کنید؟
ممنونم از شما
پاسخ: 
سلام
طبق قاعده کلی هرچه فرآیندهای اضافه کمتر باشد، به همان میزان به بهبود سرعت پردازش کمک می شود، در اینجا نیز چون تابع str_replace یک بار فراخوانی می شود، با حالتی که چندین بار فراخوانی می شود (هرچند بسیار ناچیز!) فرق خواهد داشت، اما مهمتر از بحث سرعت، نوشتن برنامه هایی با سورس خوانا، بهینه، منعطف و قابل گسترش با حداقل کدنویسی است که این به انتخاب روش ها، بستگی زیادی دارد (تجمیع موارد مشابه در قالب آرایه، یکی از روش های بهینه است).
نویسنده: مینا
زمان: ۱۲:۳۹:۰۱ - تاریخ: ۱۳۹۴/۱۰/۲۳
سلام
من یه صفحه html دارم با یه سری کد میشه کاری کرد که با if کاری کرد در صورت برقراری شرط این کده اجرا بشه. کدهاش تقریبا 30 سطر هست
پاسخ: 
سلام
هم می توانید با استفاده از دستورات معمول PHP و هم روش زیر این کار را انجام دهید:
<?php
$some_var = 1;
if($some_var == 1){
echo <<<EOD
<div>Your HTML Code!</div>
<div>Your HTML Code!</div>
<div>Your HTML Code!</div>
EOD;
}
?>
در این روش از EOD یا Heredoc در PHP استفاده شده.




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

5 × 7
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...