djdahu
1.07.2015, 01:23:31
Witam.
Mam plik log.txt zawierający logi urządzenia w postaci:
(...)
||24.06||201||14||1||
||24.06||201||15||1||
||25.06||201||16||2||
||27.06||201||17||2||
||27.06||201||18||4||
||27.06||201||19||3||
||28.06||201||20||0||
||29.06||201||21||0||
||29.06||201||22||0||
||29.06||201||23||1||
||30.06||201||00||0||
||30.06||201||01||0||
(...)
Pierwsza kolumna to wartości oznaczajace dni miesiąca, w których urządzenie wykonało daną akcję.
Zdaża się, że czasem urządzenie wykonuje akcję kilka razy w ciągu jednego dnia, a w innym dniu nie wykonuje jej wcale.
Muszę wyświetlić na stronie wszystkie dni, w których urządzenie zadziałało - bez względu na to czy raz, czy więcej razy.
Efekt, który chciałbym osiągnąć do powyższych przykładowych wartości to:
24.06
25.06
27.06
28.06
29.06
30.06
Oczywiście wiem o istnieniu funkcji pozwalających na pocięcie linii tak, by wyświetliło tylko potrzebną kolumnę danych i wiem o funkcji usuwającej duplikaty, ale walczę z tym od dłuższej "chwili" i nie mogę zlepić z tego w poprawnie działający kod.
Z góry dzięki za pomoc:)
tomxx
1.07.2015, 03:45:31
1. Pobierasz zawartość pliku i korzystając z
explode, robisz z tego tablicę dwuwymiarową.
2. Korzystając z
array_column (jeżeli masz PHP < 5.5, definiujesz tę funkcję
tak jak np. proponuje tu użytkownik), pobierasz samą pierwszą kolumnę z dniami:
$dni = array_column($logi, 0);
3. Usuwasz duplikaty, korzystając z
array_unique.
kreatiff
1.07.2015, 09:34:23
Alternatywa to otworzenie pliku np. wykorzystując np. bibliotekę SPLFileObject, pobieranie w pętli każdej linii (
przykład 1), wyciąganie z niej daty i dodawanie do tablicy jeśli nie istnieje, albo jak u przedmówcy dodawanie wszystkiego, a na końcu array_unique.
djdahu
2.07.2015, 11:40:39
Panowie, w teorii ja to wszystko wiem, tyle że mam problem ze złożeniem tego w jeden działający skrypt. Gdzieś robiłem błąd, możliwe ze gdzieś w skadni i mimo wielu prób skrypcik sie "wykrzaczał" na wszyskie, możiwe sposoby - trafił więc do kosza. Potrzebowałbym od Was pomocy w postaci gotowca, którego mógłbym przeanalizować - tak żebym wiedział gdzie robiłem błąd. To co ja napisałem niestety juz poleciało do smieci, więc nie mam jak wrzucić tutaj. Skrypt niby banalny, ale przysporzył mi troche problemów i przez niego utknąłem w miejscu..
Pozdr.
Wazniak96
2.07.2015, 11:55:32
Korzystając z SPLFileObject
$file = new SplFileObject("log.txt");
while (!$file->eof()) {
$current = $file->current();
$log = explorer('||', $current);
$days[] = $log[0];
$file->next();
}
tomxx
2.07.2015, 14:05:40
<?php
# Otwieramy plik
$fp = fopen("logi.txt", 'r');
# Sprawdzamy rozmiar pliku
# Odczytujemy treść pliku
$logi = fread( $fp, $rozmiar );
# Tworzymy tablicę z logami (jedna komórka - jedno kliknięcie)
# Każdy element tablicy dzielimy na komórki z poszczególnymi danymi
foreach($logi as &$element)
$element = explode("||", $element);
# Definiujemy funkcję array_column
if(!function_exists("array_column"))
{
function array_column($array,$column_name)
{
return array_map(function($element) use
($column_name){return $element[$column_name];}, $array);
}
}
# Pobieramy kolumnę z datą do jednej tablicy
$daty = array_column($logi, 0);
# Usuwamy duplikaty
# Otrzymujemy gotową tablicę:
?>
Nie wiem, w czym tu jest problem...
djdahu
4.07.2015, 02:46:19
Dzieki tomxx, po kilku modyfikacjach pomogło i rozwiązało mój problem. Wiem też co robiłem źle wcześniej.
Cytat
Nie wiem, w czym tu jest problem...
Gdyby nie było tu problemu (dla mnie) to nie byłoby tego tematu.
Dzięki również dla pozostałych
Pyton_000
4.07.2015, 08:30:16