You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.1 KiB

  1. <?php
  2. if (!defined("_ECRIRE_INC_VERSION")) {
  3. return;
  4. }
  5. /**
  6. * @param string $switch
  7. * @param array ...$cases tableau suite des cas testés et valeurs renvoyées
  8. * @return mixed la valeur correspondant au switch reçu
  9. *
  10. * Filtre |switchcase : comme |? mais pour plus de 2 valeurs
  11. * La valeur par défaut doit être spécifiée en dernier par 'defaut', 'default' ou 'case_default'
  12. * [(#TRUC|switchcase{
  13. * banane,jaune,
  14. * orange,orange,
  15. * ciel,bleu,
  16. * case_default,inconnue
  17. * })]
  18. * Ou bien : [(#TRUC|switchcase{
  19. * banane,jaune,
  20. * orange,orange,
  21. * ciel,bleu,
  22. * inconnue
  23. * })]
  24. */
  25. function switchcase($switch, ... $cases) {
  26. $last_case = $case = $val = '';
  27. $default_sans_case = (count($cases) % 2);
  28. while ($case = array_shift($cases)) {
  29. $val = array_shift ($cases);
  30. if ($switch == $case) {
  31. return $val;
  32. }
  33. $last_case = $case;
  34. }
  35. // dernier cas : case_default, <default_value>
  36. if ($last_case == 'case_default') {
  37. return $val;
  38. }
  39. // pas de value : case est la <default_value>
  40. if ($default_sans_case) {
  41. return $last_case;
  42. }
  43. return '';
  44. }