webForumDet fria alternativet

Förenkla switch-sats

8 svar · 475 visningar · startad av 99nvbjed

99nvbjedMedlem sedan nov. 200522 inlägg
#1

Använder nedstående php-script för att returnera hur många dagar det är i en månad. Det är lite osmidigt, finns det nåt sätt att skriva så att man kan ha flera olika värden på en "case"-rad? Alltså så att alla månader (1, 3, 5...) fångas av samma "case"?
Det skulle ju verkligen bli snyggare då...

function daysInMonth($month,$year){
	switch ($month) {
		case 1:
			return 31;
			break;
		case 2:
			if ( ($year % 4) == 0) {
				return 29;
				break;
			}else{
				return 28;
				break;
			}
		case 3:
			return 31;
			break;
		case 5:
			return 31;
			break;
		case 7:
			return 31;
			break;
		case 8:
			return 31;
			break;
		case 10:
			return 31;
			break;
		case 12:
			return 31;
			break;
		default:
			return 30;
	}
}
oskobMedlem sedan maj 20021 558 inlägg
#2

Kan man inte göra det med if?


if ( $month == "1" || $month == "2" || $month == "3" osv ) {
   return 31;
}else if ($month == "4" || $month == "5" || $month == "6" osv) {
   return 30;
}else if ( $month == "3" ) {
return 28;
}

Men det blev ganska stökigt det med såg jag :/

krisMedlem sedan sep. 200278 inlägg
#3

Skulle tro att det här funkar:

function daysInMonth($month,$year){
    switch ($month) {
        case $month == 1 || $month == 3 || $month == 5 || $month == 7 || $month == 8 || $month == 10 || $month == 12:
            return 31;
            break;
        case 2:
            if ( ($year % 4) == 0) {
                return 29;
                break;
            }else{
                return 28;
                break;
            }
        default:
            return 30;
    }
}

Edit: första versionen jag postade verkade inte fungera. Den här verkar det dock.

PeddaMedlem sedan juni 20006 032 inlägg
#4
function daysInMonth($month,$year){
    switch ($month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            return 31;
            break;
        case 2:
            if ( ($year % 4) == 0) {
                return 29;
                break;
            }else{
                return 28;
                break;
            }
        default:
            return 30;
    }
}

Är ett sätt att förkorta den på.

red/ kris, kan man verkligen använda OR i en case? Kanske går, har aldrig testat. :)

red igen/ Annars så kan man ju med date() få ut antalet dagar en viss månad.

date("t", strtotime('2006-05-01'));
PeeerMedlem sedan mars 20025 907 inlägg
#5

Annars så finns funktionen du är ute efter inbyggt i php-funktionen date()

return date('t',strtotime('2005-12-05'));
PeddaMedlem sedan juni 20006 032 inlägg
#6

Hehe, du skrev det just som jag redigerade mitt inlägg med date() :)

krisMedlem sedan sep. 200278 inlägg
#7

Min första version verkade inte fungera, har ändrat den nu. Men det verkar smartare att använda date() ;)

PeeerMedlem sedan mars 20025 907 inlägg
#8

Pedda skrev:

Hehe, du skrev det just som jag redigerade mitt inlägg med date() :)

Viktigt att poängtera är att mitt inlägg postades före din redigering! ;) :p

99nvbjedMedlem sedan nov. 200522 inlägg
#9
date('t',strtotime('2005-12-05'));

Den var ju klockren! Passar jättebra...
Skönt att slippa den där switchen. Tack så mycket!

130 ms totalt · 3 externa anrop · v20260731065814-full.7de19299
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)