Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sortowanie danych z pliku txt
Forum PHP.pl > Forum > PHP
Tuomi
Witam.
Chciałem sobie zrobić bazę danych z kategoriami punktów POI do GPS.
Stwierdziłem, że nie ma sensu zaśmiecać MYSQL, a edycja bazy będzie łatwiejsza przez podmienienie danych w pliku TXT.
Ze strony http://webmade.org/porady/baza-danych-opar...plikach-php.php skopiowałem skrypt sortujący i lekko go zmodyfikowałem.
Skrypt wygląda tak
  1. <!DOCTYPE html
  2. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title>Lista poipoint</title>
  8. <style>
  9. body{font-size:10pt;)
  10. </style>
  11. </head>
  12. <body>
  13. <table cellpadding="5" frame="box" rules=all border=1>
  14. <tr><td>N<sub0</sub></td><td>Nazwa <a href="www.poipoint.pl" target="_blank">poipoint.pl</a></td><td>moja nazwa</td></tr>
  15.  
  16. <?php
  17. $plik = "kategorie.txt";
  18. $dane = file($plik); /* pobieram dane z pliku i zapisuje do tablicy (linia = rekord) */
  19.  
  20. for($i=0;$i<count($dane);$i++) { /* przeszukuję tablicę */
  21. list($ppname[$i], $myname[$i]) = explode(" = ", $dane[$i]);
  22. /* dzielę linię na tablicę i zapisuje dane do odpowiednich zmienncyh które równiez są tablicami */
  23. }
  24. sort ($ppname);
  25. $i=0;
  26. $num = 0;
  27. while($i < count($ppname)) {
  28. $num++;
  29. echo "<tr><td>".$num."</td><td>".$ppname[$i]."</td><td>".$myname[$i]."</td></tr>";
  30. $i++;
  31. }
  32. ?>
  33. </table>


plik kategorie:
  1. Czarne punkty = CP
  2. Dworzec autobusowy = DA
  3. Dworzec kolejowy = DK
  4. Fotoradary przenośne = FP
  5. Fotoradary stacjonarne = FS
  6. Parkingi bezpłatne = Parking
  7. Parkingi płatne = Parking pł.
  8. Pogotowie ratunkowe = PR
  9. Policja komendy i koisariaty = Policja
  10. Przejazdy Kolejowe Niestrzeżone = PKN
  11. Przejazdy Kolejowe Strzeżone = PKS
  12. Przystanek autobusowy = PA
  13. Punkt poboru opłat = PPO
  14. Stacje paliw = SP
  15. Stacje paliw 1-2-3 = SP 123
  16. Stacje paliw Arge = SP Arge
  17. Stacje paliw Bliska = SP Bliska
  18. Stacje paliw BP = SP BP
  19. Stacje paliw Lotos = SP Lotos
  20. Stacje paliw LukOil = SP LukOil
  21. Stacje paliw Orlen = SP Orlen
  22. Stacje paliw Petrochemia Płock = SP PtCh Płock
  23. Stacje paliw Shell = SP Shell
  24. Stacje paliw Statoil = SP Statoil
  25. Straż pożarna = Straż
  26. Sygnalizacje świetlne = Światła
  27. Szpitale = Szpital
  28. Fortyfikacje = Forty
  29. Miejsca Godne Zwiedzenia = MGZ
  30. Ładne Widoki = LW
  31. Szlaki turystyczne = ST
  32. Wodospady = W
  33. Zamki = C
  34. Wiadukty i Mosty = WiM
  35. Tunele = T


Problem polega na tym, że sortuje mi pierwszą kolumnę ($ppname), ale równolegle nie sortuje mi $myname. Wiem, że na mysql byłoby łatwiej, (jestem z nią bardziej obeznany) ale może coś doradzicie?

Ta wygląda tabela po tym sortowaniu:
(różnica od 4 wiersza)
Pyton_000
Czemu nie użyjesz SQLite ?

Zamień:
  1. for($i=0;$i<count($dane);$i++) { /* przeszukuję tablicę */
  2. list($ppname[$i], $myname[$i]) = explode(" = ", $dane[$i]);
  3. /* dzielę linię na tablicę i zapisuje dane do odpowiednich zmienncyh które równiez są tablicami */
  4. }
  5. sort ($ppname);
  6. $i=0;
  7. $num = 0;
  8. while($i < count($ppname)) {
  9. $num++;
  10. echo "<tr><td>".$num."</td><td>".$ppname[$i]."</td><td>".$myname[$i]."</td></tr>";
  11. $i++;
  12. }

na:
  1. $tablica = array();
  2. foreach($dane as $dana){
  3. $tmp = explode('=', $dana);
  4. $tablica[$tmp[1]] = $tmp[0];
  5. }
  6.  
  7. asort($tablica);
  8. var_dump($tablica);
  9.  


Pisane na kolanie smile.gif
Tuomi
Hmm... Coś mi nie wyszło bo wyświetliło mi Array zamiast gotowej tabeli.

Ok. Inne pytanie.

Czy dałoby radę połączyć kody:
  1. $poipoint = array ("d"=>"mango", "a"=>"papaja", "b"=>"banan", "c"=>"aronia");
  2. ksort ($poipoint);
  3. reset ($poipoint); // Funkcja ta powoduje powrót do pierwszego elementu tablicy
  4. $num = 0;
  5. while (list ($ppname, $myname) = each ($poipoint)) {
  6. $num++;
  7. echo "<tr><td>".$num."</td><td>".$ppname."</td><td>".$myname."</td></tr>";
  8. }

i
  1. $plik = "plik.txt";
  2. $dane = file($plik);
  3. for($i=0;$i<count($dane);$i++) {
  4. list($ppname[$i], $myname[$i]) = explode(" = ", $dane[$i]);
  5. }
  6. $i=0;
  7. while($i < count($ppname)) {
  8. $ppname[$i]." - ".$myname[$i]."<br>";
  9. $i++;
  10. }

ale w ten sposób by zamiast "d", "a", "b", "c" wyświetliło "$ppname[$i]" i analogicznie zamiast "mango", "papaja", "banan", "aronia" wyświetliło "$myname[$i]"?
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.