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 :

Aide à l'optimisation de code


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut Aide à l'optimisation de code
    Bonjour à tous,

    Je me sens vraiment très bête sur ce coup là. En fait, je souhaiterai un coup de main afin d'optimiser le code dont voici un extrait :

    Code PHP : 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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    $carnaval = ( isset($_POST['carnaval'])) ? $_POST['carnaval'] : null;
    $apapier = ( isset($_POST['apapier'])) ? $_POST['apapier'] : null;
    $fpapier = ( isset($_POST['fpapier'])) ? $_POST['fpapier'] : null;
    $tresor = ( isset($_POST['tresor'])) ? $_POST['tresor'] : null;
     
    $utdebut = mktime($heure, $minute, 0, $mois, $jour, $annee);
    /*0001*/
    if( $carnaval == null && $apapier == null && $fpapier == null && $tresor != null ){
    	$uttdebut = $utdebut;
    	$uttfin = $uttdebut + 3600;
    }
    /*0010*/
    if( $carnaval == null && $apapier == null && $fpapier != null && $tresor == null ){
    	$utfpdebut = $utdebut;
    	$utfpfin = $utfpdebut + 3600;
    }
    /*0011*/
    if( $carnaval == null && $apapier == null && $fpapier != null && $tresor != null ){
    	$utfpdebut = $utdebut;
    	$utfpfin = $utfpdebut + 3600;
    	$uttdebut = $utfpfin;
    	$uttfin = $uttdebut + 3600;
    }
    /*0100*/
    if( $carnaval == null && $apapier != null && $fpapier == null && $tresor == null ){
    	$utapdebut = $utdebut;
    	$utapfin = $utapdebut + 3600;
    }
    /*0101*/
    if( $carnaval == null && $apapier != null && $fpapier == null && $tresor != null ){
    	$utapdebut = $utdebut;
    	$utapfin = $utapdebut + 3600;
    	$uttdebut = $utapfin;
    	$uttfin = $uttdebut + 3600;
    }
    /*0110*/
    if( $carnaval == null && $apapier != null && $fpapier != null && $tresor == null ){
    	$utapdebut = $utdebut;
    	$utapfin = $utapdebut + 3600;
    	$utfpdebut = $utapfin;
    	$utfpfin = $utfpdebut + 3600;
    }
    /*0111*/
    if( $carnaval == null && $apapier != null && $fpapier != null && $tresor != null ){
    	$utapdebut = $utdebut;
    	$utapfin = $utapdebut + 3600;
    	$utfpdebut = $utapfin;
    	$utfpfin = $utfpdebut + 3600;
    	$uttdebut = $utfpfin;
    	$uttfin = $uttdebut + 3600;
    }
    /*1000*/
    if( $carnaval != null && $apapier == null && $fpapier == null && $tresor == null ){
    	$utcdebut = $utdebut;
    	$utcfin = $utcdebut + 3600;
    }
    /*1001*/
    if( $carnaval != null && $apapier == null && $fpapier == null && $tresor != null ){
    	$utcdebut = $utdebut;
    	$utcfin = $utcdebut + 3600;
    	$uttdebut = $utcfin;
    	$uttfin = $uttdebut + 3600;
    }
    /*1010*/
    if( $carnaval != null && $apapier == null && $fpapier != null && $tresor == null ){
    	$utcdebut = $utdebut;
    	$utcfin = $utcdebut + 3600;
    	$utfpdebut = $utcfin;
    	$utfpfin = $utfpdebut + 3600;
    }
    /*1011*/
    if( $carnaval != null && $apapier == null && $fpapier != null && $tresor != null ){
    	$utcdebut = $utdebut;
    	$utcfin = $utcdebut + 3600;
    	$utfpdebut = $utcfin;
    	$utfpfin = $utfpdebut + 3600;
    	$uttdebut = $utfpfin;
    	$uttfin = $uttdebut + 3600;
    }
    /*1100*/
    if( $carnaval != null && $apapier != null && $fpapier == null && $tresor == null ){
    	$utcdebut = $utdebut;
    	$utcfin = $utcdebut + 3600;
    	$utapdebut = $utcfin;
    	$utapfin = $utapdebut + 3600;
    }
    /*1101*/
    if( $carnaval != null && $apapier != null && $fpapier == null && $tresor != null ){
    	$utcdebut = $utdebut;
    	$utcfin = $utcdebut + 3600;
    	$utapdebut = $utcfin;
    	$utapfin = $utapdebut + 3600;
    	$uttdebut = $utapfin;
    	$uttfin = $uttdebut + 3600;
    }
    /*1110*/
    if( $carnaval != null && $apapier != null && $fpapier != null && $tresor == null ){
    	$utcdebut = $utdebut;
    	$utcfin = $utcdebut + 3600;
    	$utapdebut = $utcfin;
    	$utapfin = $utapdebut + 3600;
    	$utfpdebut = $utapfin;
    	$utfpfin = $utfpdebut + 3600;
    }
    /*1111*/
    if( $carnaval != null && $apapier != null && $fpapier != null && $tresor != null ){
    	$utcdebut = $utdebut;
    	$utcfin = $utcdebut + 3600;
    	$utapdebut = $utcfin;
    	$utapfin = $utapdebut + 3600;
    	$utfpdebut = $utapfin;
    	$utfpfin = $utfpdebut + 3600;
    	$uttdebut = $utfpfin;
    	$uttfin = $uttdebut + 3600;
    }

    Je vous prie d'avance d'excuser ce code pas optimiser pour un bit. Mais malheureusement, mon cours d'algo remonte à il y a tellement longtemps, que je ne sais plus comment résoudre ce problème.

    Une solution serait par exemple de concaténer les différentes variables $carnaval, $apapier, $fpapier et $tresor en une chaine de caractère, et passer par un switch case, qui me ferais 15 case (le cas ou tout est null est signe d'erreur et renvoie une exception).

    En vous remerciant pour toutes aide que vous pourrez m'apporter pour me mettre sur la voie.

    Si par contre je trouve une solution afin de réduire le nombre d'itération de if, je placerai le code sans hésiter.

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Si par contre je trouve une solution afin de réduire le nombre d'itération de if,
    If n'est pas une structure de boucle

    Pour optimiser ton code, surtout d'un point de vue esthétique, fais un switch déjà. Je te rappelle que tu peux
    - utiliser des expressions dans les case
    - utiliser des chaines dans les case (contrairement à C)
    - grouper les case

    Exemple:
    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
     
    switch ($var) {
      case 1:
      case 2:
      case 3:
        echo "On est dans le cas 1, 2 ou 3";
        break;
      case 4:
        echo "On est dans cas 4";
      case ($var === "salade au cummin"):
        echo "J'aime la " . $var;
        break;
      default:
        echo "On sait pas ou on est";
        break;
    }
    Ensuite, je tien à rappeller qu'utiliser est inexact. Voir cet article sur le sujet, tu sera surpris de voir ce qui peut être évalué comme vrai ou faux en PHP. S'il faut vérifier que la variable existe: isset. S'il faut vérifier que la variable existe et n'est pas vide: empty.

    Ensuite, je crois comprendre que tu utilise des masques binaires, si c'est bien le cas, tu peux te servir des opérandes binaires en PHP pour factoriser un max.

    Potasse un peu tout ça et reviens nous voir

  3. #3
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut
    Merci beaucoup pour ces quelques informations, j'ai donc encore un peu de lecture pour cette de journée.

    J'ai une autre version pas très optimisée, mais demandant moins de comparaison au niveau des ifs. Voici ce que cela donne :

    Code PHP : 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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    if( $carnaval == null ){
    	if( $apapier == null) {
    		if( $fpapier == null){
    			if( $tresor == null){
    				echo 'Erreur dans les reservation';
    				exit;
    			}
    			else{
    				$uttdebut = $utdebut;
    				$uttfin = $uttdebut + 3600;
    			}
    		}
    		else{
    			$utfpdebut = $utdebut;
    			$utfpfin = $utfpdebut + 3600;
    			if( $tresor != null){
    				$uttdebut = $utfpfin;
    				$uttfin = $uttdebut + 3600;
    			}
    		}
    	}
    	else{
    		$utapdebut = $utdebut;
    		$utapfin = $utapdebut + 3600;
    		if( $fpapier == null){
    			if( $tresor != null){
    				$uttdebut = $utapfin;
    				$uttfin = $uttdebut + 3600;
    			}
    		}
    		else{
    			$utfpdebut = $utapfin;
    			$utfpfin = $utfpdebut + 3600;
    			if( $tresor != null){
    				$uttdebut = $utfpfin;
    				$uttfin = $uttdebut + 3600;
    			}
    		}
    	}
    }
    else{
    	$utcdebut = $utdebut;
    	$utcfin = $utcdebut + 3600;
    	if( $apapier == null) {
    		if( $fpapier == null){
    			if( $tresor == null){
    				$uttdebut = $utcfin;
    				$uttfin = $uttdebut + 3600;
    			}
    		}
    		else{
    			$utfpdebut = $utcfin;
    			$utfpfin = $utfpdebut + 3600;
    			if( $tresor != null){
    				$uttdebut = $utfpfin;
    				$uttfin = $uttdebut + 3600;
    			}
    		}
    	}
    	else{
    		$utapdebut = $utcfin;
    		$utapfin = $utapdebut + 3600;
    		if( $fpapier == null){
    			if( $tresor != null){
    				$uttdebut = $utapfin;
    				$uttfin = $uttdebut + 3600;
    			}
    		}
    		else{
    			$utfpdebut = $utapfin;
    			$utfpfin = $utfpdebut + 3600;
    			if( $tresor != null){
    				$uttdebut = $utfpfin;
    				$uttfin = $uttdebut + 3600;
    			}
    		}
    	}
    }

    Bon, j'ai commencé à la rendre avant de voir le message, donc, je vous prie d'être indulgent.

    [EDIT]Pour info, le lien vers 11heaven est malheureusement kapout. La page n'existe plus sur le site en fait [/EDIT]

  4. #4
    Membre éclairé Avatar de Tillo
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 494
    Par défaut
    Bonsoir,

    C'est mieux mais ça fait encore un peu chargé, il faut une tu utilises case comme te l'a expliqué Benjamin.

    A bientôt,
    Alexis

  5. #5
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut
    Bonjour à tous,

    Alors me revoilà, j'ai bien compris que le fait de passer par un switch / case pouvait être beaucoup plus lisible au niveau du code. J'ai lu, il y a quelques jours sur un forum, que dans certains cas l'utilisation de if était plus rapide.

    Autre chose, Benjamin a parlé d'opérandes binaires pour le php pour factoriser un max. En fait, lorsque j'ai noté dans le code /*1010*/, je parle de 4 variables distinctes, mais n'ayant chacune que deux valeurs possible (0 ou 1).

    Ce matin, j'essaie donc de combiner ces variables dans l'ordre qui m'intéresse afin de pouvoir obtenir un semblant de quartet binaire. Au niveau de l'imbrication et de la combinaison des switch, je ne sais pas encore vraiment comment faire. Va falloir que je retourne en mode école, et que je sorte la feuille papier. AAAHHH, le papier, j'avais presque oublier que ça pouvait être pratique...

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    Heu... en relisant attentivement ton code, on peut en effet gravement l'optimiser.

    Je résume :
    * Tu as 4 variables en entrée :
    - Carnaval (C)
    - APapier (AP)
    - FPapier (FP)
    - Tresor (T)

    * Tu as 8 variables en sorties :
    - utXfin
    - utXdebut
    avec X valant C, AP, FP ou T

    Chaque fois qu'une variable C, AP, FP, T est renseignée, tu souhaites stocker $utdebut dans la variable utXdebut correspondante, et $utdebut+3600 dans la variable utXfin correspondante.

    donc :
    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
    if ($carnaval != null) {
      $utcdebut=$utdebut;
      $utcfin=$utdebut+3600;
    }
    if ($apapier != null) {
      $utapdebut=$utdebut;
      $utapfin=$utdebut+3600;
    }
    if ($fpapier != null) {
      $utfpdebut=$utdebut;
      $utfpfin=$utdebut+3600;
    }
    if ($tresor != null) {
      $uttdebut=$utdebut;
      $uttfin=$utdebut+3600;
    }
    Autrement dit : "Ce qui se conçoit bien s'énonce clairement" ;o)

Discussions similaires

  1. [XL-2010] Aide pour optimisation code VBA
    Par adelas93 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/11/2014, 13h56
  2. Besoin d'aide pour optimiser un code
    Par petitprince dans le forum Langage
    Réponses: 39
    Dernier message: 11/08/2009, 01h43
  3. [JAVA / Out Of Memory] Aide pour optimiser du code
    Par shaun_the_sheep dans le forum Général Java
    Réponses: 7
    Dernier message: 06/02/2007, 09h58
  4. Besoin d'aide pour optimiser du code
    Par scaleo dans le forum Langage
    Réponses: 1
    Dernier message: 07/01/2007, 13h56
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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