Pass results from an array in else if conditions

0

I have the following code:

<?php
$array = [];
$ano = 2016;


for($i = 1; $i <= 12; $i++){
    $data = $ano . '-' . $i. '-01';

    $inicio = new DateTime($data);
    $fim = new DateTime($inicio->format('Y-m-t'));
    $dias = $inicio->diff($fim, true)->days;

    $array[$i] = intval($dias / 7) + ($inicio->format('N') + $dias % 7 >= 7);

}


     $janeiro  = $array[1];
     $fevereiro= $array[2];
     $marco    = $array[3];
     $abril    = $array[4];
     $maio     = $array[5];
     $junho    = $array[6];
     $julho    = $array[7];
     $agosto   = $array[8];
     $setembro = $array[9];
     $outubro  = $array[10];
     $novembro = $array[11];
     $dezembro = $array[12];



if      ($janeiro == 4){

    //CONDIÇÃO 01

}elseif ($janeiro == 5){

    //CONDINÇÃO 02

}else{


}


if      ($fevereiro == 4){

    //CONDIÇÃO 01

}elseif ($fevereiro == 5){

    //CONDINÇÃO 02

}else{


}

if      ($marco == 4){

    //CONDIÇÃO 01

}elseif ($marco == 5){

    //CONDINÇÃO 02

}else{


}

if      ($abril == 4){

    //CONDIÇÃO 01

}elseif ($abril == 5){

    //CONDINÇÃO 02

}else{


}

if      ($maio == 4){

    //CONDIÇÃO 01

}elseif ($maio == 5){

    //CONDINÇÃO 02

}else{


}

if      ($junho == 4){

    //CONDIÇÃO 01

}elseif ($junho == 5){

    //CONDINÇÃO 02

}else{


}

if      ($julho == 4){

    //CONDIÇÃO 01

}elseif ($julho == 5){

    //CONDINÇÃO 02

}else{


}

if      ($agosto == 4){

    //CONDIÇÃO 01

}elseif ($agosto == 5){

    //CONDINÇÃO 02

}else{


}


if      ($setembro == 4){

    //CONDIÇÃO 01

}elseif ($setembro == 5){

    //CONDINÇÃO 02

}else{


}

if      ($outubro == 4){

    //CONDIÇÃO 01

}elseif ($outubro == 5){

    //CONDINÇÃO 02

}else{


}

if      ($novembro == 4){

    //CONDIÇÃO 01

}elseif ($novembro == 5){

    //CONDINÇÃO 02

}else{


}

if      ($dezembro == 4){

    //CONDIÇÃO 01

}elseif ($dezembro == 5){

    //CONDINÇÃO 02

}else{


}

?>

What would be the simplest and cleanest way to make the above conditions?

    
asked by anonymous 21.10.2016 / 18:06

2 answers

4

Friend, I placed the condition directly inside the first loop:

$meses = [1 => 'jan', 2 => 'fev', 3 => 'mar', 4 => 'abr', 5 => 'mai', 6 => 'jun', 7 => 'jul', 8 =>'ago', 9 => 'set', 10 => 'out', 11 => 'nov', 12 => 'dez'];
$ano = 2016;

for($i = 1; $i <= 12; $i++){
    $data = $ano . '-' . $i. '-01';

    $inicio = new DateTime($data);
    $fim = new DateTime($inicio->format('Y-m-t'));
    $dias = $inicio->diff($fim, true)->days;

    $res = intval($dias / 7) + ($inicio->format('N') + $dias % 7 >= 7);
    if($res == 4){
        echo $meses[$i] . " tem " . $res . " está na condição 1<br />";
    }elseif($res == 5){
        echo $meses[$i] . " tem " . $res . " está na condição 2<br />";
    }
}
    
21.10.2016 / 19:07
3

I think the big question is to really know if you need such conditions .... always validate the same in this way with the same conditions looks like a wrong logic .. But anyway, I would do it like this:

if (umNomeCoerenteParaSuaFuncao(4)) {
   //CONDIÇÃO 01
} elseif (umNomeCoerenteParaSuaFuncao(5)) {
   //CONDIÇÃO 02
}


function umNomeCoerenteParaSuaFuncao($valorBuscado) {
   return $janeiro == $valorBuscado || $fevereiro == $valorBuscado || $marco == $valorBuscado || $abril == $valorBuscado || $maio == $valorBuscado || $junho == $valorBuscado || $julho == $valorBuscado || $agosto == $valorBuscado || $setembro == $valorBuscado || $outubro == $valorBuscado || $novembro == $valorBuscado || $dezembro == $valorBuscado;
}

EDIT:

Another way to achieve this is through in_array ()

if (in_array(4, $array)) {
   //CONDIÇÃO 01
} elseif (in_array(5, $array)) {
   //CONDIÇÃO 02
}
    
21.10.2016 / 18:44