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

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    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
    Points : 44 155
    Points
    44 155
    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 régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    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
    Avatar de Spartacusply
    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
    Points : 3 274
    Points
    3 274
    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.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    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
    Points : 44 155
    Points
    44 155
    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

  7. #7
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    On y voit plus clair.... mais sans la global ce serai quand même mieux.

  8. #8
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    repeter la déclaration dans la fonction je trouve ça laid aussi.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    Merci beaucoup d'avoir pris du temps sur mon cas.

    Mais Cela ne classe pas les jours dans le bon ordre

    Ton code ci dessous donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p>Le jeudi</p><p>Le mercredi</p><p>Le samedi</p><p>Le vendredi</p><p>Période du lundi au mardi</p>
    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
    $ouverture_1_debut="vendredi";  $ouverture_1_fin="vendredi";
    $ouverture_2_debut="samedi";  $ouverture_2_fin="samedi";
    $ouverture_3_debut="lundi";  $ouverture_3_fin="mardi";
    $ouverture_4_debut="mercredi";  $ouverture_4_fin="mercredi";
    $ouverture_5_debut="jeudi";  $ouverture_5_fin="jeudi";
     
    $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);
    texte_periode($ouverture_3_debut, $ouverture_3_fin, $resultat);
    texte_periode($ouverture_4_debut, $ouverture_4_fin, $resultat);
    texte_periode($ouverture_5_debut, $ouverture_5_fin, $resultat);
    show_periode($resultat);
    Bon au risque d'être encore confus je donne plus de détails

    J'ai des fichiers xml qui me donne des résultats dans cet ordre :


    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
    <Ouverture>
     
    <PlageJ fin="vendredi" début="vendredi">
    <PlageH fin="12:00:00" début="08:00:00"/>
    <PlageH fin="16:30:00" début="13:30:00"/>
    </PlageJ>
     
    <PlageJ fin="samedi" début="samedi">
    <PlageH fin="12:00:00" début="09:00:00"/>
    </PlageJ>
     
    <PlageJ fin="mardi" début="lundi">
    <PlageH fin="12:00:00" début="08:00:00"/>
    <PlageH fin="17:30:00" début="13:30:00"/>
    </PlageJ>
     
    <PlageJ fin="mercredi" début="mercredi">
    <PlageH fin="12:00:00" début="08:00:00"/>
    </PlageJ>
     
    <PlageJ fin="jeudi" début="jeudi">
    <PlageH fin="12:00:00" début="08:00:00"/>
    <PlageH fin="17:30:00" début="13:30:00"/>
    </PlageJ>
     
    </Ouverture>
    Et voila comment sont les valeurs Php actuelles que j'utilise pour afficher les jours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $xml->Ouverture->PlageJ[0]['debut']     $xml->Ouverture->PlageJ[0]['fin']
    $xml->Ouverture->PlageJ[1]['debut']     $xml->Ouverture->PlageJ[1]['fin']
    $xml->Ouverture->PlageJ[2]['debut']     $xml->Ouverture->PlageJ[2]['fin']
    $xml->Ouverture->PlageJ[3]['debut']     $xml->Ouverture->PlageJ[3]['fin']
    $xml->Ouverture->PlageJ[4]['debut']     $xml->Ouverture->PlageJ[4]['fin']

  10. #10
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Pardon c'est ksort() pas sort()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    Oui avec ksort ca fonctionne, merci

    Mais il reste un dernier truc que je ne comprends pas !

    C'est comment sortir le echo de la fonction ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function show_periode($resultat) {
      ksort($resultat);
      foreach ($resultat as $textes) {
        foreach ($textes as $texte) {
         //echo '<p>' . $texte . '</p>';
         return $texte;
        }
      }
    }
      echo '<p>'.$texte.'</p>';

  12. #12
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function show_periode($resultat) {
      output = '';
      ksort($resultat);
      foreach ($resultat as $textes) {
        foreach ($textes as $texte) {
         $output.= '<p>' . $texte . '</p>';
        }
      }
      return $output;
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    MERCI tout fonctionne bien.

+ 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