[PHP] Jak wypisać w tabeli zawartość pliku tekstowego z polami oddzielonymi separatorem?
Chcesz na podstawie pliku tekstowego z danymi w osobnych liniach oddzielonych separatorem utworzyć tabelę HTML.
Takie zastosowanie plików txt jest szalenie często wykorzystywane w praktyce i bardzo przydatne. W pliku tekstowym możesz umieścić surowe dane i na podstawie takiego pliku wygenerować dowolną treść strony WWW umieszczając dane np. w tabeli.
W ten sposób plik tekstowy jest niewielki objętościowo, można go łatwo edytować, a wynikowe dane możesz przedstawić w dowolnej postaci, bez wcześniejszego formatowania ich w pliku.
Stwórzmy plik tekstowy o nazwie plik.txt. Umieścimy w nim imiona, nazwiska i wiek kilku osób. Równie dobrze mogą to być inne pola (np. newsy). Ważne aby każdy rekord znajdował się w osobnej linijce, a linijka składała się z pól oddzielonych jakimś znakiem, który nie występuje w tekscie.
`Jan`Kowalski`23`
`Piotr`Winnicki`25`
`Izabela`Nowak`19`
`Zuza`Zuzkowska`33`
Zawartość pliku można łatwo zamienić w elegancką tabelę:
Imię |
Nazwisko |
Wiek |
Jan |
Kowalski |
23 |
Piotr |
Winnicki |
25 |
Izabela |
Nowak |
19 |
Zuza |
Zuzkowska |
33 |
Aby osiągnąć taki rezultat zastosuj poniższy skrypt:
<?
$dane = file("plik.txt");
echo "<table border=1><tr><td><b>Imię</b></td>
<td><b>Nazwisko</b></td><td><b>Wiek</b></td></tr>";
foreach ($dane as $linia) {
$l = explode("`", $linia);
echo "<tr><td>$l[1]</td><td>$l[2]</td><td>$l[3]</td></tr>";
}
echo "</table>";
?>
Funkcja file() wczytuje zawartość podanego pliku do tablicy $dane. W pętli foreach każda linijka tablicy rozbijana jest w funkcji explode() na poszczególne elementy rozdzielone podanym znakiem. W tablicy $l znajdują się poszczególne pola i można się do nich odwołać za pomocą indeksu.
Ponieważ znak separujący pola znajduje się już na początku linii, więc numeracja właściwych danych w tablicy $l zaczyna się od 1. Zerowy indeks przechowuje pusty łańcuch znaków.
Wypisujemy w pętli poszczególne indeksy dla każdego wiersza tabeli. W ten sposób tabela wypełni się danymi z pliku. Oczywiście można umieścić dodatkowy nagłówek. Nie ma też problemu z ustaleniem innej kolejności danych w tablicy - wystarczy tylko wypisać indeksy tablicy $l w innym porządku.