[RESOLU] Quelles conditions utiliser SWITCH ou ELSEIF ? Help

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Quelles conditions utiliser SWITCH ou ELSEIF ? Help

Re: Quelles conditions utiliser SWITCH ou ELSEIF ? Help

par Pierreszwk » 25 mai 2016, 15:07

Bonjour,

La structure switch est utilisé pour pour remplacer les if/elseif/else lorsque tu n'as qu'une seule variable à comparer a plusieurs valeurs exactes (si a == 0 alors, si a == 1 alors ...). Si comme dans ton cas tu as plusieurs variables à tester, le switch n'est pas un bon choix. De même si tu dois utiliser des opérateurs de comparaisons tels que > X ou < Y. Le switch ne répond pas à ce fonctionnement.

Autre avantage du switch (mais à manipuler avec précaution), c'est que tu peux enchainer les conditions, dès lors que tu n'utilises pas de break pour mettre fin à un cas.
switch ($a) {
  case 0 : // if ($a == 0)
    echo 'X';
    break;
  case 1 : // elseif ($a == 1) 
    echo 'Y';
  case 2 :  // elseif ($a == 2)
    echo 'Z';
    break;
  default :  // else
    echo '...';
    break;
}
Avec le code si dessus, si $a==0, on affiche X ; si $a==1 on affiche Y (et comme il n'y a pas de break) on affiche également Z, même si $a n'est pas égal à 2 ; si $a ==2 on affiche uniquement Z ... :)

Oh super ! Merci de ton aide ;)

Re: Quelles conditions utiliser SWITCH ou ELSEIF ? Help

par Ryle » 25 mai 2016, 15:04

Bonjour,

La structure switch est utilisé pour pour remplacer les if/elseif/else lorsque tu n'as qu'une seule variable à comparer a plusieurs valeurs exactes (si a == 0 alors, si a == 1 alors ...). Si comme dans ton cas tu as plusieurs variables à tester, le switch n'est pas un bon choix. De même si tu dois utiliser des opérateurs de comparaisons tels que > X ou < Y. Le switch ne répond pas à ce fonctionnement.

Autre avantage du switch (mais à manipuler avec précaution), c'est que tu peux enchainer les conditions, dès lors que tu n'utilises pas de break pour mettre fin à un cas.
switch ($a) {
  case 0 : // if ($a == 0)
    echo 'X';
    break;
  case 1 : // elseif ($a == 1) 
    echo 'Y';
  case 2 :  // elseif ($a == 2)
    echo 'Z';
    break;
  default :  // else
    echo '...';
    break;
}
Avec le code si dessus, si $a==0, on affiche X ; si $a==1 on affiche Y (et comme il n'y a pas de break) on affiche également Z, même si $a n'est pas égal à 2 ; si $a ==2 on affiche uniquement Z ... :)

Re: Quelles conditions utiliser SWITCH ou ELSEIF ? Help

par Pierreszwk » 25 mai 2016, 14:29

Niveau performance, les solutions seront trés similaire. les diffèrences ne devrait pas se ressentir sur un script classique.
Si tu fais appel à cette fonction plusieurs dizaine de millier de fois en une éxécution, une comparaison de temps d'éxécution serait interessant.

Pour tes exemples, je remarques plusieurs erreurs.
après un return, un echo est inutile et ne sera pas éxécuté.

Il y a beaucoup de répétition dans ta fonction, je te proposerai plutot ceci :
function calcul($a,  $b) {

  if( $b[0]  == 'T' ){
      $c = 0;
  } elseif ($a[0] == $b[0] && $a[2] == $b[2]) {
    $c = 5;
  } elseif (($a[0] == $a[2] && $b[0] == $b[2]) || ($a[0] > $a[2]) && ($b[0] > $b[2]) || ($a[0] < $a[2] && $b[0] < $b[2]) ){
    $c = 3;
  } else {
    $c = 0 ;
  }
echo '<td>' ;
    echo $a ;
    echo '<br>' ;
    $c = 0 ;
    return ($c);//à voir ce que tu cherche à faire ici, un echo ou un return (dans ce cas le dernier echo est inutile
    echo '</td>' ;
}
A la vue de tes conditions, le switch n'est pas le plus indiqué car elles ne portent pas toutes sur une seule variable. Il y a des possibilité d'utilisé SWITCH mais je ne te les conseil pas.


Super merci de ton aide et de ta modification ! Du coup le SWITCH on l'utilise dans quelle situation ?

Re: Quelles conditions utiliser SWITCH ou ELSEIF ? Help

par Spols » 25 mai 2016, 13:43

Niveau performance, les solutions seront trés similaire. les diffèrences ne devrait pas se ressentir sur un script classique.
Si tu fais appel à cette fonction plusieurs dizaine de millier de fois en une éxécution, une comparaison de temps d'éxécution serait interessant.

Pour tes exemples, je remarques plusieurs erreurs.
après un return, un echo est inutile et ne sera pas éxécuté.

Il y a beaucoup de répétition dans ta fonction, je te proposerai plutot ceci :
function calcul($a,  $b) {

  if( $b[0]  == 'T' ){
      $c = 0;
  } elseif ($a[0] == $b[0] && $a[2] == $b[2]) {
    $c = 5;
  } elseif (($a[0] == $a[2] && $b[0] == $b[2]) || ($a[0] > $a[2]) && ($b[0] > $b[2]) || ($a[0] < $a[2] && $b[0] < $b[2]) ){
    $c = 3;
  } else {
    $c = 0 ;
  }
echo '<td>' ;
    echo $a ;
    echo '<br>' ;
    $c = 0 ;
    return ($c);//à voir ce que tu cherche à faire ici, un echo ou un return (dans ce cas le dernier echo est inutile
    echo '</td>' ;
}
A la vue de tes conditions, le switch n'est pas le plus indiqué car elles ne portent pas toutes sur une seule variable. Il y a des possibilité d'utilisé SWITCH mais je ne te les conseil pas.

Quelles conditions utiliser SWITCH ou ELSEIF ? Help

par Pierreszwk » 25 mai 2016, 12:07

Hello le monde !
Je suis Développeur Front et je m'intéresse dorénavant de près au PHP et j'ai une petite question qui pourra sembler toute bête au meilleurs d'entre vous et c'est pour cela que je vous demande votre aide.

J'ai actuellement une fonction 'calcul' avec une condition IF à l'intérieur. Mais en me renseignant un peu sur la doc de PHP j'ai vu une autre condition qui peut être mieux intéressante ... c'est la condition SWITCH CASE.

Voici mon code avec la condition IF :
$mat = array (
   "3-1",
   "1-0",
   "1-5",
   "3-1",
   "3-0",
   "1-3",
   "1-2",
   "2-1",
   "2-1",
   "3-0",
   "2-1",
   "4-0",
   "0-0",
   "1-2",
   "2-1",
   "0-0",
   "1-1",
   "2-3",
   "0-2",
   "0-4",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
   "TBD",
  ) ;
  // print_r($mat);

  $c=0;
  function calcul($a, $b) {
    if ($b[0] == "T")
    {
    echo '<td>' ;
      echo $a ;
      echo '<br>' ;
      $c = 0;
      return ($c);
      echo '</td>' ;
    }
    if ($a[0] == $b[0] && $a[2] == $b[2])
    {
      echo '<td>' ;
      echo $a ;
      echo '<br>' ;
      $c = 5;
      return ($c);
      echo '</td>' ;
    }
    if ($a[0] == $a[2] && $b[0] == $b[2])
    {
      echo '<td>' ;
      echo $a ;
      echo '<br>' ;
      $c = 3;
      return ($c);
      echo '</td>' ;
    }
    if (($a[0] > $a[2]) && ($b[0] > $b[2]))
    {
      echo '<td>' ;
      echo $a ;
      echo '<br>' ;
      $c = 3;
      return ($c);
      echo '</td>' ;
    }
    if ($a[0] < $a[2] && $b[0] < $b[2])
    {
      echo '<td>' ;
      echo $a ;
      echo '<br>' ;
      $c = 3;
      return ($c);
      echo '</td>' ;
    }else
    {
    echo '<td>' ;
    echo $a ;
    echo '<br>' ;
    $c = 0 ;
    return ($c);
    echo '</td>' ;
    }
  }

puis voici ce que j'ai pu faire avec la condition ELSEIF :
function calcul($a,  $b) {

  if( $b[0]  == 'T' ){
      echo '<td>';
      echo $a;
      echo '<br>';
      $c = 0;
      return( $c );
      echo '</td>';
  } elseif ($a[0] == $b[0] && $a[2] == $b[2]) {
    echo '<td>' ;
    echo $a ;
    echo '<br>' ;
    $c = 5;
    return ($c);
    echo '</td>' ;
  } elseif ($a[0] == $a[2] && $b[0] == $b[2]) {
    echo '<td>' ;
    echo $a ;
    echo '<br>' ;
    $c = 3;
    return ($c);
    echo '</td>' ;
  } elseif ($a[0] > $a[2]) && ($b[0] > $b[2]) {
    echo '<td>' ;
    echo $a ;
    echo '<br>' ;
    $c = 3;
    return ($c);
    echo '</td>' ;
  } elseif ($a[0] < $a[2] && $b[0] < $b[2]) {
    echo '<td>' ;
    echo $a ;
    echo '<br>' ;
    $c = 3;
    return ($c);
    echo '</td>' ;
  } else {
    echo '<td>' ;
    echo $a ;
    echo '<br>' ;
    $c = 0 ;
    return ($c);
    echo '</td>' ;
  }
}

Ma question est de savoir si la condition SWITCH est plus intéressante que la condition ELSEIF dans ce cas et si ça vous dérange de me montrer la fonction 'calcul' avec la condition SWITCH :)


Merci de votre aide !
• QUE L'ART FORCE SOIT AVEC VOUS •