Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2011, 10h37   #1
Nouveau Membre du Club
 
François
Inscription : mars 2008
Messages : 59
Détails du profil
Informations personnelles :
Nom : François
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2008
Messages : 59
Points : 25
Points : 25
Par défaut "Continualiser" des événements ponctuels (création de graphique)

Bonjour à tous!

Je galère depuis plusieurs jours en essayant de "continualiser" des variables.
(en faite il s'agit plutôt de discrétiser sur une petite intervalle)

Explications:

J'ai des objets 'événements', ponctuels, qui peuvent prendre deux valeurs: 0 ou 1.
Code :
1
2
3
4
5
6
7
 
{évènements: 
   {date:"2011-01-25", time:"15:32:02", valeur:0},
   {date:"2011-01-25", time:"15:35:41", valeur:1},
   {date:"2011-01-25", time:"17:11:56", valeur:0},
   {date:"2011-01-25", time:"17:12:34", valeur:1}
}
Je cherche à réaliser un graphique (avec pChart) avec en abscisse l'échelle du temps, de 00:00:00 à 23:59:59 par exemple. ($offset gère la précision - ici 1 heure)

La courbe doit être à 1 tous le temps sauf en cas d'évènement contradictoire.
Voici ce que j'ai fait, mais cela ne fonctionne pas...

J'ai une chimili droite pour les 3 premières heures sur mon graphique, rien ensuite.


Voici un exemple de mon procédé:
Code :
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
 
$debut= new DateTime("00:00:00"); 
$fin= new DateTime("23:59:59");
$offset = 3600; //Précision du graphique
 
$o = array('00:00:00' => 1); //Valeur initiale
$b = array('23:59:59' => 1); //Valeur finale
$data[] = $o; //Tableau des résultats qui sera utilisé par pChart.
$data[] = $b;
 
$abscisse = array(); //Utilisé par pChart par la suite
 
 
while($debut< $fin) {
	$debut->modify('+$offset seconds');
	$new_time = $debut->format('H:i:s');
 
        array_push($new_time,$abscisse); //On crée le tableau d'abscisse avec les différentes heures
 
        $a = array($new_time => 1); //Valeur par défaut
 
	$data[] = $a; //Tableau de résultat	
 
	foreach($evenements as $e) {
 
	  if($e->status ==0) {
	     $c = array($e->time => 0);
	  } else if($e->status == 1) {
	     $c = array($e->time => 1);
	   }
 
	$data[] = $c;
 
     }
	$data[] = $b;
 
}

Pourriez-vous m'aider svp?

Merci!
franquis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 12h12   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Hello

J'ai eu récement un problème similaire, la solution consiste à alouer un tableau de 24 entrées avec une valeur par défaut (1 dans ton cas) puis de déterminier lors de l'itération des résultats (supposé désordonés dans mon cas) quel index utiliser:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
<?php
if ($results = Database::query($query))
{
    $values = array_fill(0, 24, 0); // pour 24h
    foreach ($results as $row)
    {
         // granularité horraire
         $index = ceil(($row['timestamp'] - $time_start) / 3600);
         $values[$index] += $row['count']
   ...
Essaie d'adapter cette méthode à ton cas.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2011, 09h50   #3
Nouveau Membre du Club
 
François
Inscription : mars 2008
Messages : 59
Détails du profil
Informations personnelles :
Nom : François
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2008
Messages : 59
Points : 25
Points : 25
Salut!

Je me suis inspiré de ta méthode, en particulier la fonction array_fill, et j'ai réussi à obtenir ce que je voulais.

En deux mots: bravo et merci!
franquis est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h52.


 
 
 
 
Partenaires

Hébergement Web