Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] skrypt sortujący daty..., mam pomysł, ale nie wiem jak wykonać
shpaque
post
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Witam serdecznie. Wpadłem na fajny pomysł w związku z którym mam prośbę o pomoc.

Chcę zrobić skrypt, który wyświetla mi dane z pliku aktualności w formacie:
  1. data|tytul|tresc
  2. 2013-11-05|Jakiś tytuł|Blebleble
na podane niże zasadzie:

2013-12-10|xxx|xxxxzxzxz
2013-11-20|xxx|xxzxzxzx
DATA AKTUALNA / DZISIEJSZA
2013-10-30|xxx|xxx
2013-09-10|xx|xx

powiedzmy ze z pobraniem daty sobie poradzę, rozbiciem jej również, ale jak zrobić żeby wyświetlało mi w środku aktualną datę, a np w górę 10 pozycji daty ascendycznie smile.gif a 10 pozycji do dołu daty nieaktualne w chronologii jak powyżej..?

dodatkowa rzecz, jak zrobić, żeby na innej podstronie obliczało i wyświetlało mi tylko najbliższą aktualność? Dla wyjaśnienia napiszę co to jest. W pliku są zapisane zawody z datami - chcę żeby wyświetlany był wpis najbliższych zawodów.

Ten post edytował shpaque 5.11.2013, 07:19:47
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
slash^
post
Post #2





Grupa: Zarejestrowani
Postów: 278
Pomógł: 36
Dołączył: 9.04.2003
Skąd: Płock

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


Czemu nie skorzystasz z mysql? są tam gotowe narzędzia do tego.

Mając pobrany plik w formacie ( 2013-11-05|Jakiś tytuł|Blebleble ) komendą file robisz na tych danych explode, później robisz na datach strtotime


--------------------
d(^^)b
Go to the top of the page
+Quote Post
shpaque
post
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


mysql nie probowalem nigdy, a php troche powiedzmy lykam,

ale czy strtotime przypadkiem nie dziala tylko w formacie pełnym? (01 January 1090), musiałbym rozchrzanić datę na wartości zamienić wartości miesięcy na pełne daty i dopiero?
Go to the top of the page
+Quote Post
slash^
post
Post #4





Grupa: Zarejestrowani
Postów: 278
Pomógł: 36
Dołączył: 9.04.2003
Skąd: Płock

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


A sprawdziłeś co strtotime "lyka"?

mysql nie próbowałeśquestionmark.gif? google -> pdo tutorial, kurs pdo


--------------------
d(^^)b
Go to the top of the page
+Quote Post
shpaque
post
Post #5





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


dobra pomińmy na razie temat MySQL, jak będę miał chwilę to będę uczył się baz danych...

mam tak:
  1. <?
  2. $dateins = array();
  3. $dateouts = array();
  4. $titles = array();
  5. $citys = array();
  6. $streets = array();
  7. $poolnames = array();
  8. $poollengths = array();
  9. $results = array();
  10. $database = "./db/zawody.db";
  11. $items = file($database);
  12. $last = count($items)-1;
  13.  
  14. for($i = $last; $i > $last - 1; $i--) {
  15. list($datein, $dateout, $title, $city, $street, $poolname, $poollength, $result) = explode('|', $items[$i]);
  16. $dateins[$count] = $datein;
  17. $dateouts[$count] = $dateout;
  18. $titles[$count] = $title;
  19. $citys[$count] = $city;
  20. $streets[$count] = $street;
  21. $poolnames[$count] = $poolname;
  22. $poollengths[$count] = $poollength;
  23. $results[$count] = $result;
  24.  
  25. $datastartu = $dateins[$count];
  26. $datadzisiaj = date('y-m-d');
  27.  
  28. list($year, $month, $day) = split('[/.-]', $datastartu);


co teraz?
Go to the top of the page
+Quote Post
slash^
post
Post #6





Grupa: Zarejestrowani
Postów: 278
Pomógł: 36
Dołączył: 9.04.2003
Skąd: Płock

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


Odczytujesz dane z pliku funkcja file, masz tablice elementów, funkcjami foreach i explode tworzysz tablicę wielowymiarową w której jedna kolumna odpowiada dacie, traktujesz ją strtotime, teraz możesz te dane posortować i wybrać odpowiednimi warunkami daty "większe" i "mniejsze" od "dziś".

Ten post edytował slash^ 5.11.2013, 11:31:25


--------------------
d(^^)b
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #7





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


Witam.

Proponuję podejście obiektowe bez file, foreach, explode, strtotime.

  1. class SortDataHeap
  2. extends SplHeap
  3. {
  4. public function compare($v1, $v2)
  5. {
  6. if ( new DateTime($v1[0]) == new DateTime($v2[0]) ) {
  7. return 0;
  8. }
  9. return ( new DateTime($v1[0]) < new DateTime($v2[0])) ? -1 : 1;
  10. }
  11.  
  12. }
  13.  
  14. $heap = new SortDataHeap();
  15. $file = new SplFileObject('plik.csv');
  16.  
  17. while ( $file->valid() ) {
  18. $heap->insert($file->fgetcsv('|'));
  19. }
  20.  
  21. while ( $heap->valid() ) {
  22. echo $heap->current()[0] . PHP_EOL;
  23. $heap->next();
  24. }


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
shpaque
post
Post #8





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


  1. echo $heap->current()[0] . PHP_EOL;


tu jest jakiś babol
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




$cur = $heap->current();
echo $cur[0] . PHP_EOL;


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
rocktech.pl
post
Post #10





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


Przepraszam babol dla:

  1. (PHP_VERSION_ID < '50400')


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
shpaque
post
Post #11





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


...teraz już się całkiem pogubiłem... Tak na marginesie z góry dziękuję za pomoc smile.gif


Jeszcze raz można poprosić kod powyższy ale bez błędów?
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #12





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


Sprostowanie.

Patrz http://us1.php.net/manual/en/migration54.new-features.php

Cytat
- Function array dereferencing has been added, e.g. foo()[0].



  1. class SortDataHeap
  2. extends SplHeap
  3. {
  4.  
  5. public function compare($v1, $v2)
  6. {
  7. if ( new DateTime($v1[ 0 ]) == new DateTime($v2[ 0 ]) ) {
  8. return 0;
  9. }
  10. return ( new DateTime($v1[ 0 ]) < new DateTime($v2[ 0 ])) ? -1 : 1;
  11. }
  12.  
  13. }
  14.  
  15. $heap = new SortDataHeap();
  16. $file = new SplFileObject('Q.csv');
  17.  
  18. while ( $file->valid() ) {
  19. $heap->insert($file->fgetcsv('|'));
  20. }
  21.  
  22. while ( $heap->valid() ) {
  23. $cur = $heap->current();
  24. echo $cur[ 0 ] . PHP_EOL;
  25. $heap->next();
  26. }


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
shpaque
post
Post #13





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


nic nie rozumiem z tego skryptu, poza tym po jego umieszczeniu w kodzie gdzieś 200 linijek dalej wywala mi błąd... Może dałoby się wrócić do skryptu z użyciem foreach i tak dalej..?

nikt mi nie pomoże?
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #14





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


Cytat
j wywala mi błąd...


Postaraj się proszę doprecyzować bo tak rzeczywiście nikt Ci nie pomoże ...


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
shpaque
post
Post #15





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


nie chodzi już o błąd - bo tego kodu nie pojmę, za to pojmę kod / skrypt oparty na ww. czyli file, explode, foreach... A błąd mi wywala z jakimś DIVem chyba (skoro paręset linijek dalej) ale nie wiem

Ten post edytował shpaque 14.11.2013, 08:17:15
Go to the top of the page
+Quote Post
Malukaz
post
Post #16





Grupa: Zarejestrowani
Postów: 77
Pomógł: 4
Dołączył: 16.04.2009

Ostrzeżenie: (10%)
X----


ło zabawe sobie robisz, mysql w chwile byś to napisał.

Proponuje daty na unix zmienić i potem sortować tym
Go to the top of the page
+Quote Post
shpaque
post
Post #17





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


zrobmy to od początku. mam takie coś:

  1. <?php
  2. $dateins = array();
  3. $dateouts = array();
  4. $titles = array();
  5. $citys = array();
  6. $streets = array();
  7. $poolnames = array();
  8. $poollengths = array();
  9.  
  10. $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';
  11. $count = 0;
  12. $kodindex = -1;
  13. $teraz = time();
  14. $database = './db/zawody.db';
  15. $items = file($database);
  16.  
  17. foreach($items as $line)
  18. {
  19. list($datein, $dateout, $title, $city, $street, $poolname, $poollength) = explode('|', trim($line));
  20. $dateins[$count] = $datein;
  21. $dateouts[$count] = $dateout;
  22. $titles[$count] = $title;
  23. $citys[$count] = $city;
  24. $streets[$count] = $street;
  25. $poolnames[$count] = $poolname;
  26. $poollengths[$count] = $poollength;
  27.  
  28. if ($id == strtotime($datein))
  29. {
  30. $kodindex = $count;
  31. }
  32. $count++;
  33.  
  34. for ($i = $count; $i > 0; $i--)
  35. {
  36. echo $dateins[$i];
  37. echo $dateouts[$i];
  38. echo $titles[$i];
  39. }
  40. }
  41. ?>


1. chcę żeby mi wyświetlił wpis najbliższy dzisiejszej dacie, ale który będzie
2. -||-, ale który był.

jak zrobić żeby wyświetlił mi różnicę najmniejszą ze wszystkich w pliku, ale nie równą dacie dzisiejszej?

w końcu do tego miejsca doszedłem w mękach i bólu sam, ale po resztę muszę założyć nowy temat, bo ludzie widzę nie chcą czytać - kurdę czy to tak trudno pomóc komuś komu zajmie to 5 minut? A ja musiałem nad głupimi kilkoma linijkami męczyć się przez tydzień... Temat do zamknięcia.

Ten post edytował shpaque 3.12.2013, 14:28:54
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 15:38