Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/07/2011, 11h35   #1
Membre habitué
 
Homme Alexis Amand
pitête développeur....
Inscription : octobre 2007
Messages : 140
Détails du profil
Informations personnelles :
Nom : Homme Alexis Amand
Âge : 32
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : pitête développeur....

Informations forums :
Inscription : octobre 2007
Messages : 140
Points : 116
Points : 116
Envoyer un message via MSN à tabouet Envoyer un message via Yahoo à tabouet
Par défaut Multiples tests de 2 valeurs

Bonjour à tous,

J'ai une serie de tests (une cinquantaine) à faire sur 2 valeurs. Selon les valeurs il se "passe" quelque chose. Plutôt qu'un grand discours voici un exemple:

Si a=1 et b=3 alors fonction A
Si a=3 et b=72 alors fonction B
Si a=10 et b=32 alors fonction C
Si a=56 et b=21 alors fonction B
Si a =12 et b=26 alors fonction A

les valeurs a et b n'ont aucun lien entres elles.
J'ai pensé faire une série de if les uns en dessous des autres mais c'est franchement pas génial.
A moins de créer un tableau qui contiendrait a,b, et le nom de la fonction à lancer ? Ensuite je pourrais parcourir le tableau et faire un test....

Avez vous une meilleure solution à me proposer ?

Merci et à très bientôt,
Alexis
__________________
J'aimerais mieux être le premier dans ce village que le second à Rome. (Caius Julius Caesar)

Je vous emmène en voyage sur la Route 66
ou sur mon mon site pro (qui est en pleine restructuration car il est toupouri)
tabouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 11h40   #2
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
Citation:
Envoyé par tabouet Voir le message
créer un tableau qui contiendrait a,b, et le nom de la fonction à lancer
Ca semble une bonne idée ...
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 13h31   #3
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 548
Points : 2 548
Envoyer un message via Skype™ à rawsrc
Salut,

un truc du genre :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php 
 
function seekFunc($pNeedle, array $pFuncs) {
   foreach($pFuncs as $key => $value) {
      if (in_array($pNeedle, $value)) {
         return $key;
      }
   }
}
 
$funcs = array('A' => array('1-3', '12-26'),
               'B' => array('3-72', '56-21'),
               'C' => array('10-32'));
 
$needle = '56-21';                     # a=56 b=21
$func   = seekFunc($needle, $funcs);   # $func='B'
 
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2011, 18h39   #4
Membre habitué
 
Homme Alexis Amand
pitête développeur....
Inscription : octobre 2007
Messages : 140
Détails du profil
Informations personnelles :
Nom : Homme Alexis Amand
Âge : 32
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : pitête développeur....

Informations forums :
Inscription : octobre 2007
Messages : 140
Points : 116
Points : 116
Envoyer un message via MSN à tabouet Envoyer un message via Yahoo à tabouet
Bonjour,

Finalement j'ai choisi la méthode du tableau qui contient a, b, et le nom de la fonction. C'est peut-être pas meilleure mais elle a le mérite de fonctionner. Elle me permet aussi d'ajouter ou enlever des valeurs rapidement et facilement.

A bientôt,
Alexis
__________________
J'aimerais mieux être le premier dans ce village que le second à Rome. (Caius Julius Caesar)

Je vous emmène en voyage sur la Route 66
ou sur mon mon site pro (qui est en pleine restructuration car il est toupouri)
tabouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2011, 19h34   #5
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Citation:
Envoyé par tabouet Voir le message
Finalement j'ai choisi la méthode du tableau qui contient a, b, et le nom de la fonction.
Bonjour,

Peux-tu nous mettre ton code ?
ca pourrait en aider certains qui se poseraient la même question, ok ?
Merci
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 12h57   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Pour ceux qui aiment l'objet, allez faire un tour du coté de http://en.wikipedia.org/wiki/Chain-o...bility_pattern

__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 00h30   #7
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 548
Points : 2 548
Envoyer un message via Skype™ à rawsrc
Citation:
Envoyé par Benjamin Delespierre Voir le message
Pour ceux qui aiment l'objet, allez faire un tour du coté de http://en.wikipedia.org/wiki/Chain-o...bility_pattern
Bon, puisque tu le suggères si gentiment et que cela peut servir, voici une petite implémentation du pattern CoR pour PHP 5.3+
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
 
# Classe de base au pattern Chain Of Responsability
abstract class PairsHandler {
 
   # on utilise le late static binding
   static  $func            = NULL;       # nom de la fonction traitant la paire
   static  $pairs           = array();    # tableau des paires prises en charge par la classe
   static  $nextHandlerName = NULL;       # Nom de la classe à laquelle le traitement sera transféré 
                                          # si et seulement si la classe courante ne prends pas en charge la paire
 
   /**
    * Renvoie le nom de la fonction en charge de la paire
    * Si aucune fonction trouvée -> FALSE
    * @return string|FALSE
    */
   static function name($p) {
      if (in_array($p, static::$pairs)) {
         return static::$func;
      } 
      elseif (NULL !== static::$nextHandlerName) {
         $next = static::$nextHandlerName; # on passe le traitement à la classe suivante
         return $next::name($p);
      } 
      else {
         return FALSE;
      }
   }
}
 
# Classe servant de point d'entrée à la chaine de reponsabilités
# On peut aussi s'en passer
class PairHandler extends PairsHandler {
   static $func  = NULL;
   static $pairs = array();
   static $nextHandlerName = 'FuncA';
}
 
class FuncA extends PairsHandler {
   static $func  = 'A';
   static $pairs = array('1-3', '12-26');
   static $nextHandlerName = 'FuncB';
}
 
class FuncB extends PairsHandler {
   static $func = 'B';
   static $pairs = array('3-72', '56-21');
   static $nextHandlerName = 'FuncC';
}
 
class FuncC extends PairsHandler {
   static $func  = 'C';
   static $pairs = array('10-32');
   static $nextHandlerName = NULL; # arrêt de la chaine de responsabilités
}               
 
$func = PairHandler::name('56-21'); # a=56 b=21
 
# on aurait pu aussi attaquer par FuncA
# $func= FuncA::name('56-21'); # a=56 b=21
 
?>
Le principe est là, l'implémentation diffère un peu (voire beaucoup) de la version officielle qui n'est pas du tout static. L'intérêt majeur de ce genre d'approche est qu'il n'est plus nécessaire d'avoir 36 milles "else if" ou "case" et surtout cela permet d'étendre les possibilités à l'infini rien qu'en rajoutant des classes. Modularité et flexibilité avant tout :-)
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h59.


 
 
 
 
Partenaires

Hébergement Web