![]() |
![]() ![]() |
![]() |
![]()
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.
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 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Tak na szybko, reszte sobie ogarnij sam.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Bardzo dziękuję.
Napisz proszę, czy mogę wykorzystać dane wczytywane w sposób jak w moim skrypcie, tzn. czy: $data w Twoim kodzie jest tożsame z moim $rows i czy obróbkę danych (dzielenie na paczki po 5 itd.) mam zawrzeć w już istniejącej pętli while?
Pozdrawiam |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Nie. Podstaw po prostu swoją gotowa tablice zamiast $data i nie. Nie w pętli. Poza nią
Ten post edytował Pyton_000 20.04.2017, 21:55:01 |
|
|
![]()
Post
#5
|
|
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
Bardzo proszę o wyjaśnienie. Ten post edytował zbysiusp 21.04.2017, 10:08:01 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Hej zbysiusp,
Pyton_000 napisał Ci na szybko przykład z logiką, niekoniecznie gotowe rozwiązanie. Jeśli widzisz błąd to po pierwsze powinieneś luknąć do manuala i zobaczyć o co biega. No ale masz tu gotowca, z wyjaśnieniem: Zamień wiersz 32 z Twojego listingu na takie coś:
no i w 35 zamiast var_dump daj Co tu się dzieje? 1. array_chunk($data, 5) dzieli tablicę $data na kilka mniejszych, z których każda zawiera 5 elementów 2. array_column zwraca tablicę wartości z jednej kolumny tablicy. Tu był ten błąd z brakującym drugim parametrem funkcji - ten drugi parametr to nazwa kolumny. 3. array_sum sumuje wartości z tablicy, które potem dzielisz przez 5 żeby otrzymać średnią wilgotność Co może być niejasne na pierwszy rzut oka, to indeksowanie tablicy po array_chunk. Najlepiej zrób var_dump($sets) w wierszu 27 i przeanalizuj wynik - od razu Ci się wszystko poukłada w logiczną całość. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witaj, bostaf
Bardzo serdecznie dziękuję za gotowy przykład i wyjaśnienia. Dzięki Tobie i Koledze Pyton_000 zrobiłem duży krok w zgłębianiu tajemnic PHP. Zrobiłem podobnie z danymi LIVE z bazy danych i działa jak oczekiwałem. Pozostaje jeszcze przywrócenie formatu JSON jak w skrypcie z pierwszego postu. Jest prawie dobrze, ale nie mogę poradzić sobie z wstawieniem tablicy tablic: 'data' aktualny wynik działania skryptu
Pozdrawiam serdecznie zbysiusp Ten post edytował zbysiusp 21.04.2017, 22:11:32 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witaj,
Bardzo serdecznie dziękuję za kolejną, konkretną i trafną odpowiedź! Dodałem jedynie linię sumującą $wynik1 i $wynik2 i dopiero ich sumę zakodowałem do formatu JSON. Wynik działania skryptu jest zgodny w 100% z moim oczekiwaniem.
Pozdrawiam serdecznie zbysiusp |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.07.2025 - 08:20 |