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 :

boucle incompréhensible ?


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
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Par défaut boucle incompréhensible ?
    Bonjour à tous,

    Je cherche à determiner un jour dans l'année en fonction du numéro du jour dans l'année que je fourni à ma fonction.

    admettons que je cherche à trouver 1er décembre et que pour ce faire je passe en paramètre à ma fonction 334

    voici ma fonction :

    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
     
    public $jour_dans_le_mois = array(31,28,31,30,31,30,31,31,30,31,30,31);
    public $tabMois=array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
     
    public function jourPeriode($jourZ){
    for($k=0; $k<=11; $k++) {
     
    echo $k."=>".($jourZ - $this->jour_dans_le_mois[$k]).", ";
     
    if(($jourZ - $this->jour_dans_le_mois[$k]) <= 0){
    $k=12;
    }else{
    $jourZ -= $this->jour_dans_le_mois[$k]; 
    $j++;
    }
    };
     
    $tabReturn=array($jourZ+1, $this->tabMois[$j]);
    return $tabReturn;
    }
    voici maintenant le résultat du echo placé au début de ma fonction :

    0=>303, 1=>275, 2=>244, 3=>214, 4=>183, 5=>153, 6=>122, 7=>91, 8=>61, 9=>30, 10=>0, 0=>119, 1=>91, 2=>60, 3=>30, 4=>-1,
    dans la mesure ou j'ai cette condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(($jourZ - $this->jour_dans_le_mois[$k]) <= 0){
    $k=12;
    }
    lorsque $k est égal à 12 ne devrais-je pas sortir de cette boucle ???

    J'étais parti au départ sur une boucle encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function jourPeriode($jourZ){
    for($i=0; $i<=11; $i++) {
    // cette boucle décompte tant que le numero est supérieur au nombre de jour du mois et passe au mois suivant, puis s'arrete quand le nombre correspond à la durée du mois parcouru.
    echo $jourZ."=>".$this->jour_dans_le_mois[$i].", ";
     
    if(($jourZ - $this->jour_dans_le_mois[$i]) > 0)  { $jourZ -= $this->jour_dans_le_mois[$i]; } else { break; } ;
    };
    $tabReturn=array($jourZ+1, $this->tabMois[$i]);
    return $tabReturn;
    }
    et voici le résultat du echo :

    334=>31, 303=>28, 275=>31, 244=>30, 214=>31, 183=>30, 153=>31, 122=>31, 91=>30, 61=>31, 30=>30, 150=>31, 119=>28, 91=>31, 60=>30, 30=>31,
    à ce stade je n'y comprend plus rien

    Merci d'avance pour votre aide

  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
    Beaucoup plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $jour = 334;
    $annee = 2010;
    echo date('d/m/Y', mktime(0, 0, 0, 1, 1 + $jour, $annee));
    Le mois de février ne fait pas toujours 28 jours de toute facon.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Par défaut
    Merci sabotage,

    Non je sais bien qu'il y à des années bissextiles mais dans mon cas ça ne me préoccupe pas, je me base sur une année non bissextile pour juste afficher des dates comme :

    du 1 décembre au 30 avril

    il n'y a pas d'année c'est pour cela que je fourni un tableau ou le mois de Février comporte 28 jours

    dans les champs de saisie c'est pareil on ne peut pas rentrer le 29 Février, ou alors il sera considéré comme 1er Mars.

    Mais pourquoi elle marche pas ma boucle ?

    Je l'ai encore simplifiée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $i=0;
    while($jourZ > 0){
    echo $jourZ."=>".($jourZ - $this->jour_dans_le_mois[$i]).", ";
    $jourZ=($jourZ - $this->jour_dans_le_mois[$i]);
    $i++;
    };
    et mon echo dit :

    334=>303, 303=>275, 275=>244, 244=>214, 214=>183, 183=>153, 153=>122, 122=>91, 91=>61, 61=>30, 30=>0, 150=>119, 119=>91, 91=>60, 60=>30, 30=>-1,
    c'est pourtant bien : strictement supérieur à 0 la condition.

    or le while semble s'arreter uniquement au -1

    et puis pourquoi d'un coup $jourZ devient égal à 150 ???

    De toute façon je vais utiliser ta méthode mais j'aimerai bien comprendre

    Merci encore

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Par défaut
    ça y est j'ai compris

    En fait j'appelle 2 fois ma fonction dans ma page

    Donc ça repartait sur la date de fin

    Faudrait jamais travailler le week end

    en tout cas merci quand même Sabotage pour ta méthode beaucoup plus simple

    Bonne soirée à tous

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

Discussions similaires

  1. [XL-2003] Boucle incompréhensible avec Application.Intersect
    Par LiliPod dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/04/2013, 20h47
  2. boucle avec test compliquée & incompréhension
    Par lilyla dans le forum MATLAB
    Réponses: 4
    Dernier message: 18/03/2008, 14h51
  3. problème incompréhensible de boucle
    Par mattyeux dans le forum ASP
    Réponses: 8
    Dernier message: 15/01/2008, 16h48
  4. Erreur incompréhensible dans une boucle
    Par Neuromancien2 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/08/2007, 17h48
  5. boucles while/for : syntaxe incompréhensible
    Par Loceka dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 14/12/2006, 22h04

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