Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wydobycie danych z ostatniej linijki
Forum PHP.pl > Forum > PHP
shpaque
Witam serdecznie - faktycznie pytałem i wujka Google, i szukałem po forach - są krótkie wpisy wyciągające np 3 linijkę od góry, albo kasujące ostatnią...

Mnie natomiast chodzi o krótkie rozwiązanie skryptu - jak wyciągnąć dane linii ostatniej z pliku, przedostatniej i 3 od końca. Ponieważ w mojej opcji "ostatnio dodane" jak chyba wszędzie im coś jest później dodane - znajduje się dalej...

Na razie mam coś takiego:

  1. <?php
  2. $database = './db/extradb.csv';
  3.  
  4. if (!file_exists($database))
  5. {
  6. echo 'Baza danych nie odnaleziona!';
  7. }
  8.  
  9. $items = file($database);
  10. foreach($items as $line)
  11. {
  12. list($logtime, $foto, $kod, $nazwa, $rozmiar, $firma, $stan, $material, $opis, $dostep) = explode('|', trim($line));
  13. $logtimes[$count] = $logtime;
  14. $fotos[$count] = $foto;
  15. $kods[$count] = $kod;
  16. $nazwas[$count] = $nazwa;
  17. $rozmiars[$count] = $rozmiar;
  18. $firmas[$count] = $firma;
  19. $stans[$count] = $stan;
  20. $materials[$count] = $material;
  21. $opiss[$count] = $opis;
  22. $dosteps[$count] = $dostep;
  23. ?>


co teraz zrobić, żeby powyciągać sobie wszystkie zmienne z:

ostatniej linijki,
przedostatniej,
3 od końca...

rozumiem że wówczas musiałbym zrobić takie pętle:
if ($count == "ostatni") - tutaj nie wiem co, i tak dalej "if ... przedostatni" etc...

@edit

czy mogę wykorzystać coś takiego?
  1. function readlastline()
  2. {
  3. $fp = @fopen("/dosmnt/LOGFILE.DAT", "r");
  4. $pos = -1;
  5. $t = " ";
  6. while ($t != "\n") {
  7. fseek($fp, $pos, SEEK_END);
  8. $t = fgetc($fp);
  9. $pos = $pos - 1;
  10. }
  11. $t = fgets($fp);
  12. fclose($fp);
  13. return $t;
  14. }

jak to zmodyfikować?

wiem, że to chyba nie jest zbyt trudne i gdybym poswiecil tydzien czasu sam doszedlbym do rozwiazania - ale nie mam tygodnia czasu... Stad prośba o pomoc
mortus
Zamiast foreach użyj zwykłego for:
  1. $items = file($database);
  2. $last = count($items)-1;
  3. for($i = $last; $i > $last - 3; $i--) {
  4. // no i wyciągamy tutaj to co chcemy z 3 ostatnich linii
  5. list($logtime, $foto, $kod, $nazwa, $rozmiar, $firma, $stan, $material, $opis, $dostep) = explode('|', $items[$i]);
  6. }
shpaque
ogromne dzięki smile.gif tylko jeszcze małe pytanko - rozumiem że ten kod wyciaga wszystko z 3 lini - jak zrobić zeby wyciągał z każdej po kolei?
  1. for($i = $last; $i > $last - 3; $i--) {
  1. for($i = $last; $i > $last - 2; $i--) {
  1. for($i = $last; $i > $last; $i--) {
? Chyba nie?

halo halo jest tam kto? smile.gif
longinus_torwaldzki
a nie lepiej

  1. krsort($items);


i masz już na początku...
Kod
$items[0]
$items[1]
$items[2]
shpaque
można tylko ja nie chce sortowania chce dane TYLKO z:
- ostatniej linijki,
- TYLKO z przedostatniej
i TYLKO z 3 od konca - chce to w 3 roznych tabelach zrobic,.,,

@Mortus dobrze mi podpowiedział tyle że teraz te 3 ostatnie wpisy układają mi się w pionie - jak zrobić zeby układały się w poziomie?
mortus
Wyświetlanie wpisów nie zależy od podanego wyżej fragmentu kodu. Pokaż jak generujesz odpowiedni HTML i jak wygląda styl CSS dla tego HTML-a.
shpaque
@mortus dzieki za pomoc zrobilme tak:
  1. <?php
  2. $logtimes = array();
  3. $fotos = array();
  4. $kods = array();
  5. $nazwas = array();
  6. $rozmiars = array();
  7. $firmas = array();
  8. $stans = array();
  9. $materials = array();
  10. $opiss = array();
  11. $dosteps = array();
  12. $database = "./db/fajnadb.csv";
  13. $items = file($database);
  14. $last = count($items)-1;
  15.  
  16. for($i = $last; $i > $last - 3; $i--) {
  17. // no i wyciągamy tutaj to co chcemy z 3 ostatnich linii
  18. list($logtime, $foto, $kod, $nazwa, $rozmiar, $firma, $stan, $material, $opis, $dostep) = explode('|', $items[$i]);
  19. $logtimes[$count] = $logtime;
  20. $fotos[$count] = $foto;
  21. $kods[$count] = $kod;
  22. $nazwas[$count] = $nazwa;
  23. $rozmiars[$count] = $rozmiar;
  24. $firmas[$count] = $firma;
  25. $stans[$count] = $stan;
  26. $materials[$count] = $material;
  27. $opiss[$count] = $opis;
  28. $dosteps[$count] = $dostep;
  29.  
  30.  
  31. echo "<table align='center' width='100' bgcolor='#FFFFFF'>";
  32. echo "<tr>";
  33. echo "<td align='center' width='100'><a href='./baza.php'><img src=./../db/images/tn" . $fotos[$count] . " title='".$firmas[$count]." - rozmiar ".$rozmiars[$count]." - ".$opiss[$count]."'></a></td>\n";
  34. echo "<tr>";
  35. echo "</table>\n";
  36. }
  37. ?>


efekt można zonaczyć na www.zapomniane-na-wymiane.pl na stronie glownej /bez logowania/ na dole - wyswietlaja sie 3 rzeczy od konca w dobrej kolejnosci - ale w pionie... a jak zrobic w poziomie?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.