Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] tylko jeden rekord...
Forum PHP.pl > Forum > PHP
shpaque
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"?
timon27
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
shpaque
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)
Turson
  1. for($i=0;$i<=$count;$i++)
shpaque
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
Turson
co masz w $count?
Pyton_000
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
shpaque
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..!
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.