8725 sujets

Développement web côté serveur, CMS

Bonsoir,
Je récupère un tableau json et avec ce code je récupère les données que je choisis (dans l'exemple la date et le vent) toutes les trois heures sur 5 jours :
<?php
     $json = file_get_contents("http://myAPI");
    $data = json_decode($json, true);
    foreach ($data as $record) 
{
echo '<p>' .date("d-m-Y H:i:s", $record['localTimestamp']) .'</br>';
echo $record['wind']['chill'] .'</br></p>';
}


Je voudrais maintenant sélectionner la fréquence des données (passer de toutes les trois heures à toutes les 24 heures par exemple).
J'ai essayé de manipuler la fonction date en ajoutant 1 jour mais je ne sais pas si c'est ce que je dois faire et j'ai une erreur.
Merci
Bonjour, tu pourrais incrémenter un compteur afin de ne prendre qu'un enregistrement sur 8, ce qui t'en ferait 1 toutes les 24 heures.


   $counter = 0;
    foreach ($data as $record) 
{
    if( $counter == 0 ){
      echo '<p>' .date("d-m-Y H:i:s", $record['localTimestamp']) .'</br>';
      echo $record['wind']['chill'] .'</br></p>';
    }
    $counter++;
    if( $counter == 7 ){
        $counter = 0;
    }

}
Merci!
La première donnée du fichier json commence à deux heures du matin, ce qui m'intéresse pas!
J'ai donc modifié ton code mais l'idée est la même :

   $counter = 0;
    foreach ($data as $record) 
{
    if( $counter == 4 ){
      echo '<p>' .date("d-m-Y H:i:s", $record['localTimestamp']) .'</br>';
      echo $record['wind']['chill'] .'</br></p>';
    }
    $counter++;
    if( $counter == 12 ){
        $counter = 4;
    }

}

J'ai maintenant les données pour le 20 mai à 14 h00, le 21 mai à 14 h00 etc... pendant 5 jours.

Mais l'idéal serait pour moi d'avoir le 20 mai à 8 h00 à 14 h00 et à 20 h00, la même chose pour le 21 mai etc... et là j'aurai un problème avec la boucle je crois!

Puis je imaginer quelque chose avec une condition switch ?
Du genre "quand le $record['localTimestamp'] arrive à 8h00 12h00 ou 20h00 alors donne moi les données ?
J'arrive pas en tout cas à coder cela avec mon niveau...
Mais j'avance, merci encore
Finalement, j'ai fait ça! je sais pas si il y a plus simple mais ça fonctionne.
   $counter = 0;
    foreach ($data as $record) 
{
    if( $counter == 2 OR $counter == 4 OR $counter == 6 OR $counter == 10 OR $counter == 12 OR $counter == 14 OR $counter == 18 OR $counter == 20 OR $counter == 22 OR $counter == 24 OR $counter == 30 OR $counter == 32 OR $counter == 34) {
      echo '<p>' . date("d-m-Y H:i:s", $record['localTimestamp']) . '</br>';
      echo $record['wind']['chill'] .'</br></p>';
    }
    $counter++; 
}
Sinon, tu pourrais aussi faire comme cela, sans compteur:

foreach ($data as $record){
	if( in_array( date("H", $record['localTimestamp']), array(8,14,20)  )){
		echo '<p>' .date("d-m-Y H:i:s", $record['localTimestamp']) .'</br>';
		echo $record['wind']['chill'] .'</br></p>';
	}
}
Parfait, ça parait simple en voyant le code mais je ne l'aurais pas trouvé aujourd'hui Smiley smile
il faudra sans doute modifier:

if( in_array( date("H", $record['localTimestamp']), array('08','14','20')  )){

Vu que "H" retourne l'heure sur 2 charactères.
Bien que "H" retourne l'heure sur 2 charactères, le premier exemple fonctionne tres bien... et le 2eme aussi!
Modifié par woubi (20 May 2014 - 21:32)
Bonsoir,
Finalement ca ne fonctionne pas car j'ai une liste déroulante et quand je change de ville j'ai un nouveau tableau qui s'affiche et l'autre ne disparaît pas!
Je me retrouve donc avec une ville et les prévisions pour deux villes...
Peut etre qu'un peu de Javascript pourrait régler cela ?
Ou bien si je transforme mon fichier json en xml sera t'il plus simple à exploiter ?
Merci