Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][XML][xPath] sortowanie wynikow, stronicowanie
Forum PHP.pl > Forum > Przedszkole
bikebog
Witam.

chciałbym posortować dane według daty dodania. Przykładowy format daty "01/07/2009 11:11:11", po czym chciałbym by na każdej stronie wyświetlało się np. po 25 wyników. Jak to mogę zrobić?

  1. <?php
  2. $dom = new DOMDocument();
  3.  
  4. $dom->load('grzyby.xml');
  5.  
  6. $xpath = new DOMXPath($dom);
  7.  
  8. $grzyby= $xpath->query("/Grzyby/Grzyb");
  9.  
  10. foreach ($grzyby as $grzyb) {
  11.        $datas = $grzyb->getElementsByTagName("DataDodania");
  12.        $data= $datas->item(0)->nodeValue;
  13.        echo $data;
  14. }
  15. ?>


Z góry dziękuję za pomoc:)

I jak pomoże ktoś? biggrin.gif
Pawel_W
zamieniasz datę na format liczbowy, wrzucasz do tablicy, sortujesz i wyświetlasz winksmiley.jpg
bikebog
W SQLowym języku to nie problem zrobić, a tu sobie za bardzo nie radze przy xpathu.

Mam datę zmienić do takiej formy:
  1. <?php
  2. $in  = array ( '/');
  3. $out  = array ( '-');
  4. str_replace($in, $out, $data)
  5. ?>


Można prosić o przykład?
bikebog
OK coś tam wymodziłem, ale nie działa. Tylko co tu jest nie tak?:

  1. <?
  2.  
  3. $dom = new DOMDocument();
  4.  
  5. $dom->load('grzyby.xml');
  6.  
  7. $xpath = new DOMXPath($dom);
  8.  
  9. $datas = $xpath->query("/Grzyby/Grzyb");
  10.  
  11. $datas[] = array(preg_replace("/[s:/]-]/si", "", date('Y-m-d H:i:s', strtotime(str_replace("/", "-", $datas->getElementsByTagName("DataDodania"))))));
  12.  
  13. rsort($datas);
  14.  
  15. foreach ($datas as $data) {
  16.    echo $data."<br>";
  17. }
  18. ?>




Prośba o pomoc.

?
erix
Nie działa, czyli...?
bikebog
Fatal error: Call to undefined method DOMNodeList::getElementsByTagName() in

  1. $datas[] = array(preg_replace("/[s:/]-]/si", "", date('Y-m-d H:i:s', strtotime(str_replace("/", "-", $datas->getElementsByTagName("DataDodania"))))));


Wyświetla się taki błąd. I nie wiem jak to poprawić.

Ktoś pomoże?
TrevorGryffits
Wyszukiwanie XPathem zawsze zwraca obiekt DOMNodeList, czyli jak sama nazwa wskazuje listę pasujących węzłów. Żeby dobrać się do jednego korzystasz z metody DOMNodeList::item(), a jak chcesz do wszystkich musisz skorzystać z foreach.
bikebog
Zrobiłęm coś takiego:
  1. <?
  2. $dom = new DOMDocument();
  3. $dom->load('grzyby.xml');
  4. $xpath = new DOMXPath($dom);
  5. $datas = $xpath->query("/Grzyby/Grzyb");
  6.  
  7. foreach ($datas as $data) {
  8. $data = $data->getElementsByTagName("DataDodania");
  9. $data = $data->item(0)->nodeValue;
  10. $data = str_replace("/", "-", $data);
  11. $data = date('Y-m-d H:i:s', strtotime($data));
  12. $data = array((float)preg_replace("/[s:-\s]/si", "", $data));
  13. rsort($data);
  14. foreach ($data as $daty) {
  15. echo $daty.'<br>';
  16. }
  17.  
  18. }


  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <Grzyby>
  3. <Grzyb>
  4. <Nazwa>borowik szlachetny</Nazwa>
  5. <NazwaLac>Boletus edulis</NazwaLac>
  6. <Rodzaj>Jadalny</Rodzaj>
  7. <wystepowanie>jakaś treść</wystepowanie>
  8. <DataDodania>02/01/2009 11:00:57</DataDodania>
  9. </Grzyb>
  10. <Grzyb>
  11. <Nazwa>muchomor czerwony</Nazwa>
  12. <NazwaLac>Amanita muscaria</NazwaLac>
  13. <Rodzaj>Trujący</Rodzaj>
  14. <wystepowanie>jakaś treść jakaś treść jakaś treść</wystepowanie>
  15. <DataDodania>02/05/2008 11:00:55</DataDodania>
  16. </Grzyb>
  17. <Grzyb>
  18. <Nazwa>muchomor różowy</Nazwa>
  19. <NazwaLac>Amanita</NazwaLac>
  20. <Rodzaj>Trujący</Rodzaj>
  21. <wystepowanie>jakaś treść jakaś treść jakaś treść..........</wystepowanie>
  22. <DataDodania>02/07/2008 11:00:51</DataDodania>
  23. </Grzyb>
  24. <Grzyb>
  25. <Nazwa>muchomor jadalny</Nazwa>
  26. <NazwaLac>Amanita lolo</NazwaLac>
  27. <Rodzaj>Jadalny</Rodzaj>
  28. <wystepowanie>jakaś treść jakaś------- treść jakaś treść..........</wystepowanie>
  29. <DataDodania>02/03/2010 11:00:52</DataDodania>
  30. </Grzyb>
  31. </Grzyby>

Ale też nie działa jak powinno - nie sortuje od najwiekszego do najmniejszego, co jest nie tak? , czy mógłbym prosić o konkretny przykład na moje pytanie dotyczące tematu sad.gif

Dziękuję i pozdrawiam.

sadsmiley02.gif

?
erix
Czyli gotowca? Jak ma być posortowane, skoro Twój kod sortuje zawsze tylko jeden element?
bikebog
Raczej tak, poprosiłbym gotowca smile.gif
erix
Albo zlecenia, albo gotowe rozwiązania - dostałeś już tyle podpowiedzi, że powinieneś dawno zrobić.
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.