Avatar billede guldhammer72 Novice
12. december 2007 - 12:38 Der er 29 kommentarer og
1 løsning

Hjælp med at konvertere dette til Switch??

Hej, jeg søger hjælp til at konvertere dette til "switch", i stedet for "else", hvis der skal $$ oveni så skriv dit krav.

<?php
//placer det her

$dag=date("j"); //dagen
$mon=date("n"); //måneden

//og så tjekker du bare dag og måner

if(($dag>=1 || $dag<=30) && $mon==12) //1-30 december
{
$banner="images/header-jul.gif";
}
elseif(($dag==01 && $mon==01) || ($dag==31 && $mon==12)) //31 decmber og 1 januar
{
$banner="images/header-newyear.gif";
}
elseif(($dag==31) && $mon==10) //Halloween
{
$banner="images/header-halloween.jpg";
}
elseif(($dag>=5 || $dag<=09) && $mon==04) //Påske
{
$banner="images/header-paaske.jpg";
}
elseif(($dag==03) && $mon==02) //Prinsesse Benedikte
{
$banner="images/header-hkh-benedikte.jpg";
}
elseif(($dag==05) && $mon==02) //Kronprinsesse Mary
{
$banner="images/header-hkh-mary.jpg";
}
elseif(($dag==16) && $mon==04) //Dronning Margrethe II
{
$banner="images/header-hkh-margrethe.jpg";
}
elseif(($dag==21) && $mon==04) //Prinsesse Isabella
{
$banner="images/header-hkh-isabella.jpg";
}
elseif(($dag==08) && $mon==05) //Prinsesse Elisabeth
{
$banner="images/header-hh-elisabeth.jpg";
}
elseif(($dag==26) && $mon==05) //Kronprins Frederik
{
$banner="images/header-hkh-frederik.jpg";
}
elseif(($dag==07) && $mon==06) //Prins Joachim
{
$banner="images/header-hkh-joachim.jpg";
}
elseif(($dag==11) && $mon==06) //Prins Henrik
{
$banner="images/header-hkh-henrik.jpg";
}
elseif(($dag==23) && $mon==06) //Sankthansaften
{
$banner="images/header-skt-hans.jpg";
}
elseif(($dag==22) && $mon==07) //Prins Felix
{
$banner="images/header-hkh-felix.jpg";
}
elseif(($dag==28) && $mon==08) //Prins Nikolai
{
$banner="images/header-hkh-nikolai.jpg";
}
elseif(($dag==15) && $mon==10) //Prins Christian
{
$banner="images/header-hkh-christian.jpg";
}
elseif(($dag==02) && $mon==12) //1. Søndag i Advent.
{
$banner="images/header-advent1.jpg";
}
elseif(($dag==09) && $mon==12) //2. Søndag i Advent.
{
$banner="images/header-advent2.jpg";
}
elseif(($dag==16) && $mon==12) //3. Søndag i Advent.
{
$banner="images/header-advent3.jpg";
}
elseif(($dag==23) && $mon==12) //4. Søndag i Advent.
{
$banner="images/header-advent4.jpg";
}
else
{
$banner="images/header.jpg";
}
?>
Avatar billede nielle Nybegynder
12. december 2007 - 12:43 #1
En switch kan kun teste på een betingelse, så du får lidt svært ved at tage højde for både $dag og $mon på samme tid.
Avatar billede guldhammer72 Novice
12. december 2007 - 13:18 #2
Ehh, hvordan??
Avatar billede terrak Nybegynder
12. december 2007 - 13:18 #3
De datoer hvor du bare tester $dag og $mon, kan du smide ind i et array:

$specielledatoer = array(
'31' => array('10' => 'Halloween'),
'03' => array('02' => 'Prinsesse Benedikte'),
'05' => array('02' => 'Kronprinsesse Mary'),
'16' => array('04' => 'Dronning Margrethe II'),
'21' => array('04' => 'Prinsesse Isabella')
);

osv.

Du tester det så med:

if (array_key_exists($dag,$specielledatoer) && array_key_exists($mon,$specielledatoer[$dag])) {
$banner = $specielledatoer[$dag][$mon];
}

Det er selvfølgelig ikke hvad du efterspørger, men bare et alternativ, så du slipper for alle if-sætningerne.
Avatar billede guldhammer72 Novice
12. december 2007 - 13:38 #4
Hvad så med logoerne??
Avatar billede terrak Nybegynder
12. december 2007 - 13:46 #5
Ja hovsa, det skulle jo se sådan ud:

$specielledatoer = array(
'31' => array('10' => 'images/header-halloween.jpg'),
'03' => array('02' => 'images/header-hkh-benedikte.jpg'),
'05' => array('02' => 'images/header-hkh-mary.jpg'),
'16' => array('04' => 'images/header-hkh-margrethe.jpg'),
'21' => array('04' => 'images/header-hkh-isabella.jpg')
);

Du kan stadigvæk tilføje kommentarer ud for hver f.eks.:
'03' => array('02' => 'images/header-hkh-benedikte.jpg'), //Prinsesse Benedikte
Avatar billede guldhammer72 Novice
12. december 2007 - 13:52 #6
Sådan:
$specielledatoer = array(
'31' => array('12' => 'Nytår'),
'01' => array('01' => 'Nytårsdag'),
'03' => array('02' => 'Prinsesse Benedikte'),
'05' => array('02' => 'Kronprinsesse Mary'),
'16' => array('04' => 'Dronning Margrethe II'),
'21' => array('04' => 'Prinsesse Isabella'),
'08' => array('05' => 'Prinsesse Elisabeth'),
'26' => array('05' => 'Kronprins Frederik'),
'07' => array('06' => 'Prins Joachim'),
'11' => array('06' => 'Prins Henrik'),
'23' => array('06' => 'Sankthansaften'),
'22' => array('07' => 'Prins Felix'),
'28' => array('08' => 'Prins Nikolai'),
'15' => array('10' => 'Prins Christian'),
'31' => array('10' => 'Halloween'),
'02' => array('12' => '1. Søndag i Advent.'),
'09' => array('12' => '2. Søndag i Advent.'),
'16' => array('12' => '3. Søndag i Advent.'),
'23' => array('12' => '4. Søndag i Advent.')
);

Hvad så med dem her:
if(($dag>=1 || $dag<=30) && $mon==12) //1-30 december
elseif(($dag>=5 || $dag<=09) && $mon==04) //Påske
elseif(($dag==26) && $mon==05) //Kronprins Frederik

Dette er standardbanner
$banner="images/header.jpg";
Avatar billede guldhammer72 Novice
12. december 2007 - 13:58 #7
Okay.

Nu kommer så den sværeste den af festen:

Alt det halløj jeg skrev er sat ind ovenover <head>

men hvad gør jeg med den del der står for selv logoet??

<link rel="stylesheet" href="images/Refresh.css" type="text/css" />
        <style type="text/css" media="screen"><!--
#header  { color: #fff; font-size: 14px; background: #ccc url(<?php echo($banner); ?>) no-repeat center top; padding: 0; position: relative; top: 0px; left: 0px; width: 820px; height: 106px; visibility: visible; display: block }
--></style>
Avatar billede terrak Nybegynder
12. december 2007 - 15:13 #8
Nej, det array du har lavet har de forkerte værdier. Det skal være stien til logoerne, lige som du selv nævnte

Dine "specielle" if-sætninger bliver du nødt til at beholde. Det færdige skal ca. se sådan her ud:

<?php
//placer det her

$dag=date("d"); //dagen
$mon=date("m"); //måneden
$banner="images/header.jpg"; //sørger for at $banner altid er sat. Hvis datoen er speciel, bliver $banner overskrevet
$specielledatoer = array(
'31' => array('10' => 'images/header-halloween.jpg'),
'03' => array('02' => 'images/header-hkh-benedikte.jpg'),
'05' => array('02' => 'images/header-hkh-mary.jpg'),
'16' => array('04' => 'images/header-hkh-margrethe.jpg'),
'21' => array('04' => 'images/header-hkh-isabella.jpg')
);



if(($dag>=1 || $dag<=30) && $mon==12) //1-30 december. Bemærk at værdien $banner får her, overskrives i nedenstående script, hvis det er 1. 2. 3. eller 4. søndag i advent.
{
$banner="images/header-jul.gif";
}
elseif(($dag=='01' && $mon=='01') || ($dag==31 && $mon==12)) //31 decmber og 1 januar
{
$banner="images/header-newyear.gif";
}
elseif(($dag>=05 && $dag<=09) && $mon=='04') //Påske
{
$banner="images/header-paaske.jpg";
}

if (array_key_exists($dag,$specielledatoer) && array_key_exists($mon,$specielledatoer[$dag])) {
$banner = $specielledatoer[$dag][$mon];
}

?>

Al php koden indsætter du bare før alt andet i dit dokument, og derefter kalder du $banner det sted i dokumentet du har brug for det, lige som du viser.

Rækkefølgen det er skrevet i betyder at indholdet af $specielledatoer har første prioritet, dine if-sætninger har 2. prioritet og dit standard-banner har sidste prioritet. Så hvis der er noget specielt, en dag i påsken, vil scriptet ikke vise påske-banneret, men i stedet for banneret til den specielle dag.
Avatar billede terrak Nybegynder
12. december 2007 - 15:15 #9
Glemte noget:
Da jeg har fjernet nytår fra dine if-sætninger, skal d. 31 december og 1. januar indsættes som specielle datoer:

'31' => array('12' => 'images/header-newyear.gif'), // Første del, af en af din if-sætninger, delt i to
'01' => array('01' => 'images/header-newyear.gif') // Anden del, af en af din if-sætninger, delt i to
Avatar billede terrak Nybegynder
12. december 2007 - 15:18 #10
- og denne linje

if(($dag>=1 || $dag<=30) && $mon==12) //1-30 december. Bemærk at værdien $banner får her, overskrives i nedenstående script, hvis det er 1. 2. 3. eller 4. søndag i advent.
{

rettes til

if($mon==12) //1-31 december. Bemærk at værdien $banner får her, overskrives i nedenstående script, hvis det er 1. 2. 3. eller 4. søndag i advent, samt nytårsaften.
{
Avatar billede guldhammer72 Novice
12. december 2007 - 15:24 #11
Dvs koden skal se sådan ud:

<?php
//placer det her

$dag=date("d"); //dagen
$mon=date("m"); //måneden
$banner="images/header.jpg"; //sørger for at $banner altid er sat. Hvis datoen er speciel, bliver $banner overskrevet
$specielledatoer = array(
'31' => array('10' => 'images/header-halloween.jpg'),
'03' => array('02' => 'images/header-hkh-benedikte.jpg'),
'05' => array('02' => 'images/header-hkh-mary.jpg'),
'16' => array('04' => 'images/header-hkh-margrethe.jpg'),
'21' => array('04' => 'images/header-hkh-isabella.jpg')
);



if(($dag>=1 || $dag<=30) && $mon==12) //1-30 december. Bemærk at værdien $banner får her, overskrives i nedenstående script, hvis det er 1. 2. 3. eller 4. søndag i advent.
{
$banner="images/header-jul.gif";
}
elseif(($dag=='01' && $mon=='01') || ($dag==31 && $mon==12)) //31 decmber og 1 januar
{
$banner="images/header-newyear.gif";
}
elseif(($dag>=05 && $dag<=09) && $mon=='04') //Påske
{
$banner="images/header-paaske.jpg";
}

if (array_key_exists($dag,$specielledatoer) && array_key_exists($mon,$specielledatoer[$dag])) {
$banner = $specielledatoer[$dag][$mon];
}

?>

den anden del hedder allerede $banner

<link rel="stylesheet" href="images/Refresh.css" type="text/css" />
        <style type="text/css" media="screen"><!--
#header  { color: #fff; font-size: 14px; background: #ccc url(<?php echo($banner); ?>) no-repeat center top; padding: 0; position: relative; top: 0px; left: 0px; width: 820px; height: 106px; visibility: visible; display: block }

--></style>
Avatar billede terrak Nybegynder
12. december 2007 - 15:47 #12
Kan se at det eksempel jeg kom med før, ikke er det endelige jeg havde skrevet. (Eksperten har det irriterende problem, at den slet ikke poster hvad man skriver, efter et hvis tidsrum på same side). Jeg prøver lige igen:

<?php

$dag=date("d"); //dagen
$mon=date("m"); //måneden
$banner="images/header.jpg";

$specielledatoer = array(
'31' => array('10' => 'images/header-halloween.jpg'),
'03' => array('02' => 'images/header-hkh-benedikte.jpg'),
'05' => array('02' => 'images/header-hkh-mary.jpg'),
'16' => array('04' => 'images/header-hkh-margrethe.jpg'),
'21' => array('04' => 'images/header-hkh-isabella.jpg'),
'31' => array('12' => 'images/header-newyear.gif'),
'01' => array('01' => 'images/header-newyear.gif')
);

if($mon==12) {
$banner="images/header-jul.gif";
} elseif(($dag>=05 && $dag<=09) && $mon=='04') {
$banner="images/header-paaske.jpg";
}

if (array_key_exists($dag,$specielledatoer) && array_key_exists($mon,$specielledatoer[$dag])) {
$banner = $specielledatoer[$dag][$mon];
}

?>
Avatar billede guldhammer72 Novice
12. december 2007 - 15:48 #13
Der er ivhertfald sne på nu http://www.krazymail.dk/
Avatar billede smitten1 Nybegynder
12. december 2007 - 16:01 #14
http://dk.php.net/manual/en/language.types.integer.php

tjek lige hvad der sker, når du sætter et nul foran.

$dag <= 09 giver måske ikke lige det du forventer
Avatar billede guldhammer72 Novice
12. december 2007 - 16:23 #15
hvad er nu det???
Avatar billede guldhammer72 Novice
12. december 2007 - 16:25 #16
Hvad skal det sige, at jeg skal fjerne alle 0'er fra
01, 02 03 osv op til 09???
Avatar billede smitten1 Nybegynder
12. december 2007 - 16:34 #17
00 til og med 07 vil tilfældigvis give det rigtige resultat, da de første otte tal har samme værdi i begge talsystemer. 08 09 er ikke gyldige værdier, og php vil betragte dem som værdien 0.

echo 08; // udskriver 0
echo 010; // udskriver 8
Avatar billede guldhammer72 Novice
12. december 2007 - 16:40 #18
dvs, at 08 og 09 skal hedde 8 og 9
men 10 kan godt hedde 10???
Avatar billede guldhammer72 Novice
12. december 2007 - 16:44 #19
Nuvel, nu hedder den:
<?php
//placer det her

$dag=date("d"); //dagen
$mon=date("m"); //måneden
$banner="images/header.jpg";

$specielledatoer = array(
'03' => array('02' => 'images/header-hkh-benedikte.jpg'),
'05' => array('02' => 'images/header-hkh-mary.jpg'),
'16' => array('04' => 'images/header-hkh-margrethe.jpg'),
'21' => array('04' => 'images/header-hkh-isabella.jpg'),
'8' => array('05' => 'images/header-hh-elisabeth.jpg'),
'26' => array('05' => 'images/header-hkh-frederik.jpg'),
'07' => array('06' => 'images/header-hkh-joachim.jpg'),
'11' => array('06' => 'images/header-hkh-henrik.jpg'),
'23' => array('06' => 'images/header-skt-hans.jpg'),
'22' => array('07' => 'images/header-hkh-felix.jpg'),
'28' => array('8' => 'images/header-hkh-nikolai.jpg'),
'15' => array('10' => 'images/header-hkh-christian.jpg'),
'31' => array('10' => 'images/header-halloween.jpg'),
'02' => array('12' => 'images/header-advent1.jpg'),
'9' => array('12' => 'images/header-advent2.jpg'),
'16' => array('12' => 'images/header-advent3.jpg'),
'23' => array('12' => 'images/header-advent4.jpg'),
);

if($mon==12){
$banner="images/header-jul.gif";
}
elseif(($dag>='5' && $dag<='9') && $mon=='4')
{
$banner="images/header-paaske.jpg";
}
if (array_key_exists($dag,$specielledatoer) && array_key_exists($mon,$specielledatoer[$dag])) {
$banner = $specielledatoer[$dag][$mon];
}
?>
Avatar billede terrak Nybegynder
12. december 2007 - 16:52 #20
Hvis du vil være sikker på ikke at få den fejl, typecaster vi $dag og $mon til en streng.

For godt nok bliver
echo 08;
til 0, men hvis man konverterer strengen '08' til et tal, bliver det til 8:
echo (integer)'08';

Det vil sige at scriptet bliver

<?php

$dag=(string)date("d"); //dagen
$mon=(string)date("m"); //måneden
$banner="images/header.jpg";

$specielledatoer = array(
'31' => array('10' => 'images/header-halloween.jpg'),
'03' => array('02' => 'images/header-hkh-benedikte.jpg'),
'05' => array('02' => 'images/header-hkh-mary.jpg'),
'16' => array('04' => 'images/header-hkh-margrethe.jpg'),
'21' => array('04' => 'images/header-hkh-isabella.jpg'),
'31' => array('12' => 'images/header-newyear.gif'),
'01' => array('01' => 'images/header-newyear.gif')
);

if($mon==12) {
$banner="images/header-jul.gif";
} elseif(($dag>='05' && $dag<='09') && $mon=='04') {
$banner="images/header-paaske.jpg";
}

if (array_key_exists($dag,$specielledatoer) && array_key_exists($mon,$specielledatoer[$dag])) {
$banner = $specielledatoer[$dag][$mon];
}

?>

Man kunne også undlade de foranstillede nuller alle steder, men jeg er lidt doven :-)
Avatar billede terrak Nybegynder
12. december 2007 - 16:55 #21
Læg også mærke til at

} elseif(($dag>=05 && $dag<=09) && $mon=='04') {

blev til

} elseif(($dag>='05' && $dag<='09') && $mon=='04') {
Avatar billede guldhammer72 Novice
12. december 2007 - 17:01 #22
dvs skal alle 0 væk på alt det er er under 10???
Avatar billede guldhammer72 Novice
12. december 2007 - 17:04 #23
Nu hedder den:
<?php
//placer det her
$dag=(string)date("d"); //dagen
$mon=(string)date("m"); //måneden
$banner="images/header.jpg";

$specielledatoer = array(
'3' => array('2' => 'images/header-hkh-benedikte.jpg'),
'5' => array('2' => 'images/header-hkh-mary.jpg'),
'16' => array('4' => 'images/header-hkh-margrethe.jpg'),
'21' => array('4' => 'images/header-hkh-isabella.jpg'),
'8' => array('5' => 'images/header-hh-elisabeth.jpg'),
'26' => array('5' => 'images/header-hkh-frederik.jpg'),
'7' => array('6' => 'images/header-hkh-joachim.jpg'),
'11' => array('6' => 'images/header-hkh-henrik.jpg'),
'23' => array('6' => 'images/header-skt-hans.jpg'),
'22' => array('7' => 'images/header-hkh-felix.jpg'),
'28' => array('8' => 'images/header-hkh-nikolai.jpg'),
'15' => array('10' => 'images/header-hkh-christian.jpg'),
'31' => array('10' => 'images/header-halloween.jpg'),
'2' => array('12' => 'images/header-advent1.jpg'),
'9' => array('12' => 'images/header-advent2.jpg'),
'16' => array('12' => 'images/header-advent3.jpg'),
'23' => array('12' => 'images/header-advent4.jpg'),
);

if($mon==12){
$banner="images/header-jul.gif";
}
elseif(($dag>='5' && $dag<='9') && $mon=='4')
{
$banner="images/header-paaske.jpg";
}
if (array_key_exists($dag,$specielledatoer) && array_key_exists($mon,$specielledatoer[$dag])) {
$banner = $specielledatoer[$dag][$mon];
}
?>
Avatar billede terrak Nybegynder
12. december 2007 - 18:01 #24
Det jeg mente var at der var to muligheder:
- Den ene mulighed er det jeg skrev her http://www.eksperten.dk/spm/810116#rid6961326
- Den anden mulighed er, som jeg foreslog, er at fjerne de foranstillede nuller.

Det du har lavet er en blanding af begge, men den burde virke til trods for det ikke er helt optimalt.

Der er dog lige én ting du bør ændre - den sidste linje i arrayet skal ikke ende med et komma. Hvorfor den ikke give en fejl ved jeg ikke, men det skal altså se sådan her ud:

...
'9' => array('12' => 'images/header-advent2.jpg'),
'16' => array('12' => 'images/header-advent3.jpg'),
'23' => array('12' => 'images/header-advent4.jpg')
);
...
Avatar billede guldhammer72 Novice
12. december 2007 - 18:18 #25
Dvs, enten (string) ELLER fjern 0'erne??
Avatar billede nielle Nybegynder
12. december 2007 - 18:23 #26
12/12-2007 13:18:47> Det jeg skrev var at det ikke umddelbart var muligt at lave det om til en switch-baseret løsning. :^)
Avatar billede terrak Nybegynder
12. december 2007 - 18:34 #27
guldhammer > Ja næsten.

Ved mulighed 1, med foranstillede nuller, skal der:
- Bruges $dag=(string)date("d"); og $mon=(string)date("m");
- Være anførselstegn omkring tallene (så de bliver opfattet som en streng).

Ved mulighed 2, uden foranstillede nuller, skal der:
- Bruges $dag=date("j"); og $mon=date("n");
- Ikke nødvendigvis være anførselstegn omkring tallene.


date("d") er dagen på måneden, med foranstillede nuller.
date("m") er måneden på året, med foranstillede nuller.
date("j") er dagen på måneden, uden foranstillede nuller.
date("n") er måneden på året, uden foranstillede nuller.

http://dk2.php.net/date
Avatar billede guldhammer72 Novice
12. december 2007 - 18:54 #28
Dvs sådan her:
'(03)' => array('(02)' => 'images/header-hkh-benedikte.jpg'),
Avatar billede terrak Nybegynder
12. december 2007 - 19:20 #29
Nej. Hvis du valgte mulighed 2, skulle der f.eks. stå

31 => array(10 => 'images/header-halloween.jpg'),
2 => array(12 => 'images/header-advent1.jpg'),
9 => array(12 => 'images/header-advent2.jpg'),

i stedet for

'31' => array('10' => 'images/header-halloween.jpg'),
'2' => array('12' => 'images/header-advent1.jpg'),
'9' => array('12' => 'images/header-advent2.jpg'),

men det burde virke uanset hvilken du vælger. Problemet opstår først når du bruger tal som 01, 02, 03 osv. uden anførselstegn, hvilket jeg ikke var opmærksom på i mine første forslag, som smitten1 påpegede.
Avatar billede guldhammer72 Novice
20. januar 2008 - 19:40 #30
Så er det lukketid, der er frist for svar indtil Den 20/1 kl 12.00
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester