Pass results from an Else if array

Asked

Viewed 1,282 times

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 ?

  • is always the same condition? In case you have two conditions only? "CONDITION 01" AND "CONDITION 02"?

  • @Marllonnasser

  • I do not understand these guys,the question in my view was clear,had a good answer and are asking to close it, Aff’s will understand ...

2 answers

4


Buddy, I put the condition directly into 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 />";
    }
}
  • Perfect, that’s what it was, !

3

I think the big question is whether you really need such conditions.... always validate the same in this way with the same conditions seems a wrong logic.. But anyway, I would do it as follows:

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;
}

Although the lines of code have already diminished and greatly, I think you should rethink the need for such repeated validations.

EDIT:

Another way to achieve this validation is through in_array()

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

Browser other questions tagged

You are not signed in. Login or sign up in order to post.