Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Uśrednianie danych i kodowanie do formatu JSON
zbysiusp
post
Post #1





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 11.07.2009

Ostrzeżenie: (0%)
-----


Witam!

Proszę o pomoc w rozwiązaniu następującego problemu. Do bazy MySQL zapisuję co 1 minutę wynik pomiaru wilgotności powietrza. Za pomocą skryptu php pobieram dowolną ilość danych np. 17 i koduję je do formatu JSON. Skrypt, który napisałem działa bardzo dobrze.
  1. <?php
  2.  
  3. $wynik_data = mysql_query("SELECT czas_datetime FROM tab_czujniki_2 ORDER BY czas_datetime DESC LIMIT 1");
  4.  
  5. if(mysql_num_rows($wynik_data) > 0) {
  6. $r = mysql_fetch_assoc($wynik_data);
  7. $datan = $r['czas_datetime'];
  8. $daten = new DateTime($data);
  9. $daten->modify('-15 min');
  10. $minus_data = $daten->format("Y-m-d H:i:00");
  11. }
  12.  
  13. $sth = mysql_query("SELECT czas_unix, wilgotnosc FROM tab_czujniki_2 WHERE czas_datetime >= '$minus_data' ORDER BY czas_datetime ASC") or die('Błąd zapytania');
  14.  
  15. $rows = array();
  16. $rows['name'] = 'Wilgotnosc';
  17. while($r = mysql_fetch_array($sth)){
  18.  
  19. $rows['data'][] = array(1000*($r['czas_unix']),$r['wilgotnosc']);
  20. }
  21.  
  22. $result = array();
  23. array_push($result,$rows);
  24. print json_encode($result, JSON_NUMERIC_CHECK)
  25.  
  26. ?>

skrypt

Chciałbym jednak zmienić jego działanie, ale nie bardzo wiem jak podejść do tematu.
Założenia algorytmu:

1. Pobieram z bazy MySQL dowolną ilość rekordów np. 17: (czas1, wil1), (czas2, wil2), (czas3, wil3), (czas4, wil4), (czas5, wil5), ..., (czas17, wil17).
2. Z każdych pięciu, kolejnych rekordów obliczam średnią wilgotność: (wil1+wil2+wil3+wil4+wil5)/5 itd. Z 17 rekordów powstaną więc 3 średnie.
3. Średnie mają być wyliczane tak długo jak będzie 5 lub więcej rekordów. Z 17 rekordów pozostaną więc 2 rekordy niepoddane uśrednianiu.
4. Każdej średniej ma zostać przypisany czas rekordu środkowego w każdej piątce np. średniej z pierwszej piątki przypisany zostanie czas3.
5. Teraz wyliczone średnie z przypisanym czasem koduję do formatu JSON jak w przedstawionym wyżej skrypcie.

Dziękuję i pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zbysiusp
post
Post #2





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 11.07.2009

Ostrzeżenie: (0%)
-----


Witam!

Dziękuję @Pyton_000 za kod i pomoc. Nie mogę jednak ogarnąć jego działania. Spodziewam się w wyniku działa tego skryptu 3 średnich z przypisanym czasem unix:

52.8 -> 234523454 (pierwsza paczka 5 wartości),
58.0 -> 234523461 (druga paczka 5 wartości),
64,8 ->234523542 (trzecia paczka 5 wartości)

W wyniku działania skryptu otrzymuję błąd: array_column wymaga dwóch parametrów, a i wyliczonych średnich nie widzę.
skrypt
  1. <?php
  2.  
  3. $data = [
  4. [234523452, 50],
  5. [234523453, 52],
  6. [234523454, 53],
  7. [234523455, 54],
  8. [234523456, 55],
  9.  
  10. [234523457, 56],
  11. [234523458, 57],
  12. [234523461, 58],
  13. [234523462, 59],
  14. [234523463, 60],
  15.  
  16. [234523472, 62],
  17. [234523482, 64],
  18. [234523542, 65],
  19. [234523452, 66],
  20. [234523452, 67],
  21.  
  22. [234523452, 66],
  23. [234523452, 50],
  24. ];
  25.  
  26. $sets = array_chunk($data, 5);
  27.  
  28. foreach($sets as $key => $set) {
  29. if(count($set) !== 5) {
  30. continue;
  31. }
  32. $sets[$key][3][1] = array_sum(array_column($set[1]))/5;
  33. }
  34.  
  35. var_dump($sets);
  36.  
  37. ?>

Bardzo proszę o wyjaśnienie.

Ten post edytował zbysiusp 21.04.2017, 10:08:01
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 22:55