Avatar billede michaeltryl Seniormester
28. september 2017 - 07:33 Der er 4 kommentarer og
1 løsning

Kan denne kode skrives kortere

Jeg har et script som køres flere gange om dagen.
Den henter
$antal_nedsat
fra databasen og i bunden er der en ¨
if som tjekker om $opdater = ja hvorefter den enten opdatere noget i databasen eller ej.

Tænker det må kunne skrives kortere / bedre men kan ikke lige regne ud hvordan.

$time = date('H');

    if($time == "08")
    {
        if($antal_nedsat == "7")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "5")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "4")
        {
        $opdater = "ja";
        }
        else
        {
        $opdater = "nej";
        }
    }
   
    if($time == "10")
    {
        if($antal_nedsat == "7")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "6")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "3")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "2")
        {
        $opdater = "ja";
        }
        else
        {
        $opdater = "nej";
        }
    }
   
    if($time == "12")
    {
        if($antal_nedsat == "7")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "6")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "5")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "4")
        {
        $opdater = "ja";
        }
        else
        {
        $opdater = "nej";
        }
    }
   
    if($time == "14")
    {
        if($antal_nedsat == "7")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "6")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "5")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "3")
        {
        $opdater = "ja";
        }
        else
        {
        $opdater = "nej";
        }
    }
    if($time == "16")
    {
        if($antal_nedsat == "7")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "6")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "4")
        {
        $opdater = "ja";
        }
        else
        {
        $opdater = "nej";
        }
    }
   
    if($time == "18")
    {
        if($antal_nedsat == "7")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "6")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "5")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "2")
        {
        $opdater = "ja";
        }
        else
        {
        $opdater = "nej";
        }
    }
   
    if($time == "20")
    {
        if($antal_nedsat == "7")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "6")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "5")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "4")
        {
        $opdater = "ja";
        }
        else if($antal_nedsat == "3")
        {
        $opdater = "ja";
        }
        else
        {
        $opdater = "nej";
        }
    }
Avatar billede AnyFellow Mester
28. september 2017 - 08:16 #1

$time = date('H');

if (($antal_nedsat == 7) && (($time == '08') || ($time == '10') || ($time == '12') || ($time == '14') || ($time == '16') || ($time == '18') || ($time == '20'))) {
    $opdater = 'ja';
} else if (($antal_nedsat == 6) && (($time == '10') || ($time == '12') || ($time == '14') || ($time == '16') || ($time == '18') || ($time == '20'))) {
    $opdater = 'ja';
} else if (($antal_nedsat == 5) && (($time == '08') || ($time == '12') || ($time == '14') || ($time == '18') || ($time == '20'))) {
    $opdater = 'ja';
} else if (($antal_nedsat == 4) && (($time == '08') || ($time == '12') || ($time == '16') || ($time == '20'))) {
    $opdater = 'ja';
} else if (($antal_nedsat == 3) && (($time == '10') || ($time == '14') || ($time == '20'))) {
    $opdater = 'ja';
} else if (($antal_nedsat == 2) && (($time == '10') || ($time == '18'))) {
    $opdater = 'ja';
} else if (($time == '08') || ($time == '10') || ($time == '12') || ($time == '14') || ($time == '16') || ($time == '18') || ($time == '20')) {
    $opdater = 'nej';
}
Avatar billede Slater Ekspert
28. september 2017 - 08:32 #2
Eller mere læseligt:
$hour = date('h');
$antal_nedsat = 4;
$opdater = false;

$table = [
  8  => [ 4, 5, 7 ],
  10 => [ 2, 3, 6, 7 ],
  12 => [ 4, 5, 6, 7 ],
  14 => [ 3, 5, 6, 7 ],
  16 => [ 4, 6, 7 ],
  18 => [ 2, 5, 6, 7 ],
  20 => [ 3, 4, 5, 6, 7 ]
];

foreach ($table as $key => $val) {
  if ($hour == $key) {
    $opdater = in_array($antal_nedsat, $val);
  }
}

var_dump($opdater);
// Evt $opdater = $opdater ? 'ja' : 'nej';  - hvis det skal bruges som ord.
Avatar billede michaeltryl Seniormester
28. september 2017 - 08:39 #3
wow Slater
tak for den. :-)
Avatar billede arne_v Ekspert
29. september 2017 - 05:35 #4
Jeg vil mene at:



foreach ($table as $key => $val) {
  if ($hour == $key) {
    $opdater = in_array($antal_nedsat, $val);
  }
}


kan laves som:


if(array_key_exists($hour, $table)) {       
    $opdater = in_array($antal_nedsat, $table[$hour]);
}
Avatar billede Slater Ekspert
29. september 2017 - 08:33 #5
#4: Jep, tænkte selv på bagefter, at en if ville have givet mere mening, eftersom det ligesom ikke kan være flere forskellige timetal samtidig.
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

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