IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Optimiser une liste de IF


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de zipbox
    Homme Profil pro
    Excel VBA
    Inscrit en
    Juillet 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Excel VBA

    Informations forums :
    Inscription : Juillet 2004
    Messages : 49
    Points : 61
    Points
    61
    Par défaut Optimiser une liste de IF
    Bonjour,

    Voici le début de mon bout de code PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
     
    $i0 = $_POST['id'];
     
    if (!empty($i0)) { $i01 = trim($_POST['i1']); }
     
    $i02 = ""; 
     
    if ($i01 == "001A ") { $i02 = "Ok"; }
    if ($i01 == "002B ") { $i02 = "Ok"; }
    if ($i01 == "003C ") { $i02 = "Ok"; }
    if ($i01 == "004D ") { $i02 = "Ok"; }
    if ($i01 == "021E ") { $i02 = "Ok"; }
    if ($i01 == "037F ") { $i02 = "Ok"; }
    if ($i01 == "077Z ") { $i02 = "Ok"; }
    if ($i01 == "123O ") { $i02 = "Ok"; }
    if ($i01 == "321V ") { $i02 = "Ok"; }
    if ($i01 == "007Z ") { $i02 = "Ok"; }
     
    if ($i02 == "") { 
     
    echo <<<END
    
     $i01 référence à revoir . . .
    
    END;
     
    } else {
     
    echo <<<END
    
     $i01 écrire dans fichier à finir . . .
    
    END;
     
    }
     
    ?>
    Ma question, j'aimerais bien réduire les lignes de IF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($i01 == "000A ") { $i02 = "Ok"; }
    pour info : ce bout de code PHP est généré par Excel avec VBA, chaque matin . . .

    le formulaire PHP, me permet de récupérer une liste de référence, et chaque matin,

    je génère le fichier PHP, avec une nouvelle liste de IF

    Merci . . .


  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $data = ['001A ', '002B ', '003C ', '004D ', '021E ', '037F ', '077Z ', '123O ', '321V ', '007Z '];
    $i02  = in_array($i01, $data, true) ? 'Ok' : '';

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Il y a aussi le switch qui est prévu pour ça, j'ai également ajouter un false plutôt que ''

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php
     
    $i0 = $_POST['id'];
     
    if (!empty($i0)) $i01 = trim($_POST['i1']); break;
     
    switch ($i01) {
        case "001A": 
            $i02 = "Ok"; 
            break;
        case "002B": 
            $i02 = "Ok"; 
            break;
        case "003C": 
            $i02 = "Ok"; 
            break;
        case "004D": 
            $i02 = "Ok"; 
            break;
        case "021E": 
            $i02 = "Ok"; 
            break;
        case "037F": 
            $i02 = "Ok"; 
            break;
        case "077Z": 
            $i02 = "Ok"; 
            break;
        case "123O": 
            $i02 = "Ok"; 
            break;
        case "321V": 
            $i02 = "Ok"; 
            break;
        case "007Z": 
            $i02 = "Ok"; 
            break;
        default:
          $i02 = false;
    }
     
    if ($i02 == false) 
     
    echo <<<END
    
     $i01 référence à revoir . . .
    
    END;
     
    } else {
     
    echo <<<END
    
     $i01 écrire dans fichier à finir . . .
    
    END;
     
    }
     
    ?>

    Question de goût

  4. #4
    Membre du Club Avatar de zipbox
    Homme Profil pro
    Excel VBA
    Inscrit en
    Juillet 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Excel VBA

    Informations forums :
    Inscription : Juillet 2004
    Messages : 49
    Points : 61
    Points
    61
    Par défaut
    Super merci . . .

    Cool . . .


  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Il y a aussi le switch qui est prévu pour ça...
    On peut simplifier et "factoriser" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <?php
    switch ($i01) {
        case "001A": 
        case "002B": 
        case "003C": 
        case "004D": 
        case "021E": 
        case "037F": 
        case "077Z": 
        case "123O": 
        case "321V": 
        case "007Z": 
            $i02 = "Ok"; 
            break;
        default:
          $i02 = false;
    }
    Mais dans le contexte, la méthode de rawsrc est plus concise.


    N.B. PAR CONTRE, il faudrait s'assurer de la présence ou pas d'un espace :
    • c'est "001A " ou "001A" ??
    • ...


    N.B.2 @MaitrePylos
    Je ne suis pas fan d'affecter une chaine ("Ok") et/ou un booléen (false) à la même variable...
    Restons cohérent :
    • "Ok" ou ""
    • true ou false

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimiser une liste chainee lente
    Par Stillbogus dans le forum C
    Réponses: 6
    Dernier message: 10/08/2012, 22h18
  2. Optimiser l'exécution d'une liste déroulante
    Par dark_geek dans le forum ASP
    Réponses: 2
    Dernier message: 21/05/2009, 03h09
  3. Réponses: 1
    Dernier message: 17/03/2009, 08h59
  4. [optimisation] Minimum d'une liste
    Par Nemerle dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 18/01/2007, 18h52
  5. Ecriture d'une list() dans un fichier Pb d'optimisation
    Par sebastien2222 dans le forum Langage
    Réponses: 11
    Dernier message: 13/06/2006, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo