Funkcja file() wczytuje zadany plik do tablicy. Instrukcja:
$mojplik = file('dane.txt');
wczyta plik o nazwie dane.txt do zmiennej $mojplik. Zmienna $mojplik jest tablicą o zawartości:
$mojplik[0] - pierwsza linia pliku dane.txt $mojplik[1] - druga linia pliku dane.txt $mojplik[2] - trzecia linia pliku dane.txt ...
Oczywiście do elementów tablicy (zawierających teraz kolejne linie z pliku dane.txt) możemy odwoływać się stosując zmienne:
//linia nr 8 pliku dane.txt $i = 7; $mojplik[$i] //wysyłamy linijkę do klienta echo $mojplik[$i]; //linia nr 4 pliku dane.txt $numerlinii = 3; $mojplik[$numerlinii] //wysyłamy linijkę do klienta echo $mojplik[$numerlinii];
UWAGA: napisy z tablicy $mojplik zawierają na końcu znak przejścia do nowej linii! W celu usunięcia znaków przejścia do nowej linii należy skorzystać z funkcji trim() opisanej poniżej.
Funkcja count() zwraca jako wynik liczbę elementów tablicy. Instrukcja:
$mojplik = file('dane.txt'); echo count($mojplik);
wydrukuje na ekranie liczbę elementów tablicy $mojplik, równą liczbie wierszy pliku dane.txt.
Funkcja explode() dzieli zadany napis podanym napisem na tablicę napisów. Jeśli zmiennej $tab przypiszemy wartość:
$zm = 'ala,ma,kota';
wówczas instrukcja:
$tab = explode(',', $zm);
podzieli napis 'ala,ma,kota' na napisy 'ala', 'ma' oraz 'kota' i umieści je w tablicy $tab.
//teraz: // $tab[0] == 'ala' // $tab[1] == 'ma' // $tab[2] == 'kota'
Pierwszym parametrem funkcji explode() jest napis, którym „kroimy” drugi parametrem (również napis). Przykład drugi:
$zm = 'ANKA MA KOTA I KOSA'; $tab = explode('K', $zm); //teraz: // $tab[0] == 'AN' // $tab[1] == 'A MA ' // $tab[2] == 'OTA I ' // $tab[3] == 'OSA'
Funkcja explode() stanowi bardzo wygodne narzędzie do tworzenia menu na podstawie plików tekstowych.
Funkcja trim() usuwa białe z początku i z końca napisu. Białym znakiem jest dowolny spośród znaków przedstawionych w tabeli 1.
znak | kod | ASCII --------------------------------------- " " | 32 | spacja "\t" | 9 | tabulator "\n" | 10 | znak nowej linii "\r" | 13 | powrót karetki "\0" | 0 | znak NULL "\x0B" | 11 | pionowy tabulator
Tabela 1. Znaki usuwane przez funkcję trim()
Zmienna:
$zm = " \n\n ala\n ma\n kota\n\n \n";
po wywołaniu
$zm = trim($zm);
przyjmie wartość
$zm == "ala\n ma\n kota";
UWAGA: w PHP od wersji 4.0.7 funkcja trim() posiada drugi opcjonalny parametr: znaki do usunięcia. Wywołanie:
$zm = trim($zm, 'al');
spowoduje, usunięcie ze zmiennej $zm wiodących i końcowych znaków a oraz l. Po wywołaniu tym zmienna $zm przyjmie wartość:
$zm == "ma\n kot";
Oto przykład demonstrujący przetwarzanie wszystkich elementów tablicy $tab. Drukujemy kolejne elementy tablicy, oddzielając je znakiem nowego wiersza.
<?php $tab[0] = 'Witaj'; $tab[1] = 'kolego'; $tab[2] = 'na'; $tab[3] = 'mojej'; $tab[4] = 'stronie'; $tab[5] = '!!!'; $tmpcount = count($tab); for ($i = 0; $i < $tmpcount; $i++) { echo $tab[$i]; echo "\n"; } ?>
Po wykonaniu operacji Widok → Źródło, zobaczymy następujący kod:
Witaj kolego na mojej stronie !!!
Nie należy stosować wywołania funkcji count() wewnątrz instrukcji for, gdyż w takim wypadku każdy obrót pętli będzie się kończył (niepotrzebnym) wywoływaniem funkcji count(). Rozwiązanie takie jest nieoptymalne. Błędne użycie funkcji count() oznaczono tłustą czerwoną czcionką.
for ($i = 0; $i < count($tab); $i++) {
//tutaj przetwarzanie np. wydruk
echo $tab[$i];
}
Oto przykład demonstrujący przetwarzanie pliku tekstowego linia po linii. Na ekranie drukujemy kolejno wszystkie linie pliku tekstowego dane.txt. Każdą linię poprzedzamy numerem.
<?php $plk = file('dane.txt'); $tmpcount = count($plk); for ($i = 0; $i < $tmpcount; $i++) { echo $i; echo ' '; echo trim($plk[$i]); echo '<br />'; echo "\n"; } ?>
Jeśli w pliku znajdują się wyrazy:
FASOLA CEBULA GROCH KAPUSTA POMIDOR SELER POR
to wynikiem działania skryptu z przykładu 2 będzie wydruk:
0 FASOLA<br /> 1 CEBULA<br /> 2 GROCH<br /> 3 KAPUSTA<br /> 4 POMIDOR<br /> 5 SELER<br /> 6 POR<br />
Należy zwrócić uwagę na użycie funkcji trim() oraz wydruk znaku złamania wiersza "\n".
Kilka instrukcji echo możemy zastąpić jedną.
<?php $plk = file('dane.txt'); $tmpcount = count($plk); for ($i = 0; $i < $tmpcount; $i++) { echo $i . ' ' . trim($plk[$i]) . '<br />' . "\n"; } ?>
Plik tekstowy 00index.log o zawartości:
Androny:androny.txt Arbuz:arbuz.txt Baran:baran.txt Brudas:brudas.txt Chrzan:chrzan.txt Chrząszcz:chrzaszcz.txt Ciaptak:ciaptak.txt Ćwikła:cwikla.txt Depesza:depesza.txt Drzewa:drzewa.txt Foka:foka.txt
przetwarzamy linia po linii. Każdą linijkę kroimy znakiem dwukropka, po czym drukujemy na ekranie w postaci:
TYTUŁ: "Androny" PLIK: "androny.txt" TYTUŁ: "Arbuz" PLIK: "arbuz.txt" TYTUŁ: "Baran" PLIK: "baran.txt" TYTUŁ: "Brudas" PLIK: "brudas.txt" TYTUŁ: "Chrzan" PLIK: "chrzan.txt" TYTUŁ: "Chrząszcz" PLIK: "chrzaszcz.txt" TYTUŁ: "Ciaptak" PLIK: "ciaptak.txt" TYTUŁ: "Ćwikła" PLIK: "cwikla.txt" TYTUŁ: "Depesza" PLIK: "depesza.txt" TYTUŁ: "Drzewa" PLIK: "drzewa.txt" TYTUŁ: "Foka" PLIK: "foka.txt"
<?php $p = file('00index.log'); $tmpcount = count($p); for ($i = 0; $i < $tmpcount; $i++) { $l = explode(':', trim($p[$i])); echo 'TYTUŁ: "'; echo $l[0]; echo '" PLIK: "'; echo $l[1]; echo '"'; echo '<br />'; echo "\n"; } ?>
Kilka instrukcji echo możemy zastąpić jedną.
<?php $p = file('00index.log'); $tmpcount = count($p); for ($i = 0; $i < $tmpcount; $i++) { $l = explode(':', trim($p[$i])); echo 'TYTUŁ: "' . $l[0] . '" PLIK: "' . $l[1] . '"' . '<br />' . "\n"; } ?>
Należy pamiętać o użyciu funkcji trim(). W przeciwnym razie wyniki będą następujące:
TYTUŁ: "Androny" PLIK: "androny.txt " TYTUŁ: "Arbuz" PLIK: "arbuz.txt " TYTUŁ: "Baran" PLIK: "baran.txt " TYTUŁ: "Brudas" PLIK: "brudas.txt " TYTUŁ: "Chrzan" PLIK: "chrzan.txt " TYTUŁ: "Chrząszcz" PLIK: "chrzaszcz.txt " TYTUŁ: "Ciaptak" PLIK: "ciaptak.txt " TYTUŁ: "Ćwikła" PLIK: "cwikla.txt " TYTUŁ: "Depesza" PLIK: "depesza.txt " TYTUŁ: "Drzewa" PLIK: "drzewa.txt " TYTUŁ: "Foka" PLIK: "foka.txt "
W pliku 00index.log po nazwie pliku (np. androny.txt) znajduje się koniec wiersza, czyli znak "\n" lub dwa znaki "\r\n". Funkcja trim() usuwa te znaki.