JeuWeb - Crée ton jeu par navigateur

Version complète : [SCRIPT] Compléter un tableau de dates
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Faisant des stats, je me suis retrouvé devant un cas de figure embetant.

Je retourne un tableau de date au format $TAB[mois/jour/an]=valeur

Ce tableau est alimenté par un requete sql. Probleme, si pour un jour donné, il n'y a pas de valeur (valeur=0), le tableau ne comporte pas d'entrée pour ce jour.

Cela créer de vilain trous dans mes courbes. J'ai donc fait un script pour initialiser mon tableau à 0 entre deux dates données:

Code :
$date_debut_jour=7;
$date_debut_mois=11;
$date_debut_an=2011;
$date_fin_jour=date('d');
$date_fin_mois=date('m');
$date_fin_an=date('Y');
$COEF_FIN=($date_fin_jour+($date_fin_mois*100)+($date_fin_an*10000));
do
    {
    //on regarde le nb max de jour dans le mois
    $jour_max = intval(date("t",$date_debut_mois));
    do
        {
        $NB7[$date_debut_mois.'/'.$date_debut_jour.'/'.$date_debut_an]=0;    
        $COEF=($date_debut_jour+($date_debut_mois*100)+($date_debut_an*10000));    
        //echo '<br>&nbsp;&nbsp;&nbsp;'.$date_debut_jour.'/'.$date_debut_mois.'/'.$date_debut_an.' = '.$COEF.'/'.$COEF_FIN;
        $date_debut_jour++;
        }
    while($date_debut_jour<$jour_max and $COEF_FIN!=$COEF);
        
    if($COEF_FIN!=$COEF)
        {
        $date_debut_jour=1;
        $date_debut_mois++;
        
        if($date_debut_mois==13)
            {
            $date_debut_mois=1;    
            $date_debut_an++;    
            }
        }
    }
while($COEF_FIN!=$COEF);

Si vous avez des idées d'améliorations, je suis preneur Wink
je ne maitrise pas trop les dates mais si tu arrives à trouver un entier correspondant à un jour donnée (genre un timestamp, pas basé sur les secondes, mais sur les jours calendaires)

tu peux remplir rapidement un tableau avec array_fill( $jour_debut, $nb_jours, 0);

ça t'évite de t'embêter avec tout ce code.

Après restera plus qu'à convertir tes dates dans le timestamp(par jour) et inversement
J'ai eu le même souci sur des graphiques que je voulais minute par minute (certaines minutes, il ne se passe rien!).

Mais pour avoir le tableau initialisé à zéro, je suis passé par :
$heures=range($min_heure,$max_heure,60);
$nbreq=array_fill_keys($heures,0);

$min_heure et $max_heure sont calculés lors d'une première itération de mes données:

.
.
.
for (...) {
.

$heure=mktime($time[0],$time[1],0,1,1,1970);
$min_heure=min($min_heure,$heure);
$max_heure=max($max_heure,$heure);
.
}
(14-12-2011, 04:41 PM)Ter Rowan a écrit : [ -> ]je ne maitrise pas trop les dates mais si tu arrives à trouver un entier correspondant à un jour donnée (genre un timestamp, pas basé sur les secondes, mais sur les jours calendaires)

tu peux remplir rapidement un tableau avec array_fill( $jour_debut, $nb_jours, 0);

ça t'évite de t'embêter avec tout ce code.

Après restera plus qu'à convertir tes dates dans le timestamp(par jour) et inversement

Bonne idée ! si j'y avais pensé avant ça m'aurait évité un gros bout de code bien gras dans deux de mes applis ...

il y a justement cette fonction http://fr2.php.net/cal-to-jd et sa réciproque.
DatePeriod (+ DateInterval + DateTime) ?

Exemple :
Code :
$start = new DateTime('2009-01-01');
$end = new DateTime('2009-02-01');
foreach (new DatePeriod($start, new DateInterval('P1D'), $end) as $dt) {
        echo $dt->format('Y-m-d'), PHP_EOL;
}