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 :

Array avec asort mais avec des conditions [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Par défaut Array avec asort mais avec des conditions
    Bonjour,

    Après de multiples essais avec asort je n'y vois plus clair !

    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
    /*--- Valeurs ---*/
    $vendredi="vendredi";  $samedi="samedi";  $lundi="lundi";  $dimanche="dimanche";
     
    /*--- Periode 1 ---*/
    if(empty($vendredi)) { /*Pediode 1 vide*/    echo '';    }
    else{
    if ($vendredi===$samedi) {/*Pediode 1 va afficher seulement vendredi*/ echo'Le '.$vendredi.' ';    }
    else{ /*Pediode 1 va afficher les 2 jours*/ echo 'Période1= '.$vendredi.' au '.$samedi.' '; }
    }
    /*--- periode 2 ---*/
    if(empty($lundi)) { /*Periode 2 vide*/ echo '';    }
    else{
    if ($lundi===$dimanche) { /*Periode 2 va afficher seulement lundi*/    echo 'Le '.$lundi.' '; }
    else{ /*Periode 2 va afficher  les 2 jours*/ echo 'Période2= '.$lundi.' au '.$dimanche.' ';    }
        }
    Ce code ci dessus va afficher => Période1= vendredi au samedi et Période2= lundi au dimanche
    Comment je peux faire pour trier mon résultat et faire => Période2= lundi au dimanche (période 2) et Période1= vendredi au samedi (periode 1)

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Avec un code aussi mal présenté et aussi illogique ($vendredi===$samedi) ce n'est pas étonnant que tu ne t'y retrouves pas.

    Si tu veux la période 2 avant la période 1, change l'ordre de tes deux conditions.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Par défaut
    Pour ($vendredi===$samedi) ces 2 valeurs peuvent être parfois strictement identique en provenance de mon fichier xml (qui n'est pas ma source).

    Désolé si cela est mal présenté, mais je dois avoir ces 3 conditions entre 2 valeurs. Si je remplace les jours de la semaine par ouverture1, ouverture2 etc.... cela ne sera pas forcement plus clair ;-)

    Si c'est possible j'aimerai bien que tu me montre comment tu ferais un code plus clair :-)

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Moi je commencerai déjà par utiliser des noms de variables pertinents (du genre $dateDebutPeriode1) et indenter de manière propre le code.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Par défaut
    Bon j'espère que c'est plus clair

    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
    /*--- Valeurs Période 1 ---*/
    $ouverture_1_debut="vendredi";  $ouverture_1_fin="samedi";  
    /*--- Valeurs Période 2 ---*/
    $ouverture_2_debut="lundi";  $ouverture_2_fin="dimanche";
     
    /*--- Periode 1 ---*/
    if(empty($ouverture_1_debut)) 
          { 
    /*Pediode 1 vide*/
        echo ''
            }
    else {
    if ($ouverture_1_debut===$ouverture_1_fin) /*Dans mon fichier xml j'ai parfois début=vendredi et fin=vendredi lorsqu'il y a seulement un jour d'ouverture et que c'est fermé le samedi*/
         {
    /*Pediode 1 va afficher seulement Début*/
        echo'Le '.$ouverture_1_debut.' ';    
            }
    else {
    /*Pediode 1 va afficher Début et fin*/
        echo 'Période1= '.$ouverture_1_debut.' au '.$ouverture_1_fin.' ';
            }
         }
     
    /*--- periode 2 ---*/
    if(empty($ouverture_2_debut))
          { 
    /*Pediode 1 vide*/
        echo ''
            }
    else {
    if ($ouverture_2_debut===$ouverture_2_fin)
         {
    /*Pediode 2 va afficher seulement Début*/
        echo'Le '.$ouverture_2_debut.' ';    
            }
    else {
    /*Pediode 2 va afficher Début et fin*/
        echo 'Période1= '.$ouverture_2_debut.' au '.$ouverture_2_fin.' ';
            }
         }
    Toutes les valeurs sont aléatoires, je ne peux pas changer l'ordre du code

    Comment je peux classer $ouverture_1_debut et $ouverture_2_debut par ordre logique des jours (lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche) ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Avec de l'imagination on peut tout faire
    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
    <?php
    $ouverture_1_debut="vendredi";  $ouverture_1_fin="samedi";  
    $ouverture_2_debut="lundi";  $ouverture_2_fin="dimanche";
    $semaine = array('lundi'=>1, 'mardi'=>2, 'mercredi'=>3, 'jeudi'=>4, 'vendredi'=>5, 'samedi'=>6, 'dimanche'=>7);
    function texte_periode($debut, $fin, &$resultat) {
       global $semaine;
     
       if (empty($debut)) {
          $texte = '';
       }
       elseif ($debut === $fin) {
           $texte = 'Le ' . $debut;    
       }
       else {
           $texte = 'Période du ' . $debut . ' au ' . $fin;
       }
     
        $resultat[$semaine[$debut]][] = $texte;
     
    }
     
     
    function show_periode($resultat) {
      sort($resultat);
      foreach ($resultat as $textes) {
        foreach ($textes as $texte) {
         echo '<p>' . $texte . '</p>';
        }
      }
    }
     
    $resultat = array();
    texte_periode($ouverture_1_debut, $ouverture_1_fin, $resultat);
    texte_periode($ouverture_2_debut, $ouverture_2_fin, $resultat);
    show_periode($resultat);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/03/2013, 11h11
  2. Réponses: 0
    Dernier message: 18/08/2011, 11h21
  3. Comptage dans la même table mais avec des conditions différentes
    Par V i n c e n t dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/08/2010, 14h12
  4. Réponses: 8
    Dernier message: 13/09/2009, 11h54
  5. Réponses: 1
    Dernier message: 30/06/2006, 16h01

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