Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] tylko jeden rekord..., jak go wyświetlić - zidentyfikować
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 ponownie, mój kod wygląda następująco:

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


Wyświetla mi dzięki temu wpisy późniejsze niż bieżąca data - a jak zrobić, żeby wyświetlił mi tylko najbliższy termin? Albo następny od najbliższego?
Generalnie chyba najlepiej zrobić coś takiego że by wyświetlił mi tylko rekord gdzie zmienna $difference jest najbliższa "0" - ale jak to zrobić i jak zrobić żeby naprzykład wyświetlić drugą z kolei lub 5 z kolei od godziny "zero"?

Ten post edytował shpaque 3.12.2013, 18:26:23
Go to the top of the page
+Quote Post
timon27
post
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


Abstrahując od tego że gdybyś normalnie miał to w sql to nie musiałbyś kombinować to:
Stwórz kolejną tabelę w tej pętli:
  1. $differences[$count] = "$difference;$count";

a na końcu będziesz mógł wybrać najwcześniejszy element:
  1. sort($differences);
  2. $pierwszy=explode(';',$differences[0]);
  3. $pierwszy=$pierwszy[1];
  4. $drugi=explode(';',$differences[1]);
  5. $drugi=$drugi[1];


uwaga: $pierwszy i drugi to tylko wskaźniki do danych w twoich 7 tabelach tworzonych w pętli

Ten post edytował timon27 3.12.2013, 18:56:24
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----


a jakoś prościej w for nie da się?

  1. if ($teraz < strtotime($datein))
  2. {
  3. $difference = $teraz - strtotime($dateins[$count]);
  4. for ($i > 0; $i = $count; $i++)
  5. {
  6. echo $dateins[0];
  7. echo $titles[0];
  8. echo $citys[0];
  9. }
  10. }
  11. $count++;


coś w ten deseń? - oczywiście ta pętla wyświetla mi jedną datę - niestety tą przed aktualną, zamiast najbliższą jaka będzie, no i zapętla ją w nieskończoność (ciągle się wykonuje)
Go to the top of the page
+Quote Post
Turson
post
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


  1. for($i=0;$i<=$count;$i++)
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----


teraz wyśwuietla mi wszystko oprocz najdalszej daty

testowy plik z wpisem jest tutaj: http://smusic.nazwa.pl/_olimpia/db/zawody.db powinien wyświetlić mi tylko (na dziś dzień) przedpostatnia linijkę

@ teraz wyświetla tylko jeden wpis i to najbliższy:

  1. if ($teraz < strtotime($datein))
  2. {
  3. $i = $teraz - strtotime($dateins[$count]);
  4. for ($i = $count; $i > 0; $i++)
  5. {
  6. echo $dateins[$i];
  7. echo $titles[$i];
  8. echo $citys[$i];
  9. }
  10. }
  11. $count++;


ale strasznie dłyugo się wykonuje ten skrypt

Ten post edytował shpaque 3.12.2013, 19:15:34
Go to the top of the page
+Quote Post
Turson
post
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


co masz w $count?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Pobierz wszystkie wiersze z pliku do tablicy
Zrób z tego tablicę explode
Zastosuj sobie funkcję array_multisort i posortuj po datach. (Example #3)
Potem w pętli foreach sprawdzaj warunkiem czy data > aktualna to zwracaj ew. jakie chcesz warunki.

Przecież to nie jest takie skomplikowane
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----


dla mnie nie.

teraz tak: mam taki kod:
  1. <?php
  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. $differences = array();
  11. $count = 0;
  12. $teraz = time();
  13. $database = './db/zawody.db';
  14. $items = file($database);
  15.  
  16. foreach($items as $line)
  17. {
  18. list($datein, $dateout, $title, $city, $street, $poolname, $poollength, $result) = explode('|', trim($line));
  19. $dateins[$count] = $datein;
  20. $dateouts[$count] = $dateout;
  21. $titles[$count] = $title;
  22. $citys[$count] = $city;
  23. $streets[$count] = $street;
  24. $poolnames[$count] = $poolname;
  25. $poollengths[$count] = $poollength;
  26. $results[$count] = $result;
  27. $differences[$count] = $teraz - strtotime($datein);
  28.  
  29. if ($differences[$count] < 0)
  30. {
  31. for ($i = $count; $i <= $count; $i++)
  32. {
  33. echo $differences[$i];
  34. echo " ";
  35. echo $dateins[$i];
  36. echo " ";
  37. echo $titles[$i];
  38. echo "<br>";
  39. }
  40. }
  41. $count++;
  42. }
  43. ?>


wartość, którą mi zwraca, to:
  1. -890129 2013-12-15 Puchar Sprintu
  2. -1235729 2013-12-19 Zimowe Mistrzostwa Polski
  3. -458129 2013-12-10 Super Zawody


jak zrobić, żeby ustalał $i wg $differences? (bo jak widać tu nie sortuje wg najwyższych liczb)

@ dzięki - bardzo jesteście pomocni... Wyszukać w Google pustych definicji i deklaracji php chyba nie trudno - każdy może to zrobić - byłoby mniej tematów tutaj, w jakim celu jest to forum, skoro "pomoc" ogranicza się do podania linku..? - Temat pewnie na minutę roboty dla kogoś kto się zna, a ja muszę dochodzić sam do tego tracąc nerwy i czas - to po co to forum?questionmark.gif Po co "pomaganie"?? Kiedy piszę że nie rozumiem na jakiej zasadzie to działa - to nic mi nie da suchy skrypt..!

Ten post edytował shpaque 4.12.2013, 19:47:20
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 - 16:27