Funkcja fgetcsv() w PHP
Definicja i użycie
Funkcja fgetcsv() czyta wiersz z wskaźnika pliku i analizuje pola CSV.
Z fgets() Podobnie, ale różni się tym, że fgetcsv() analizuje wiersz wejściowy i znajduje pola w formacie CSV, a następnie zwraca tablicę zawierającą te pola.
fgetcsv() zwraca FALSE w przypadku błędów, w tym w przypadku końca pliku.
Komentarz:Od PHP 4.3.5 operacja fgetcsv() jest bezpieczna w trybie binarnym.
Gramatyka
fgetcsv(file,length,separator,enclosure)
Parametr | Opis |
---|---|
file | Obowiązkowy. Określa plik do sprawdzenia. |
length |
Opcjonalny. Określa maksymalną długość wiersza. Musi być większa niż najdłuższy wiersz w pliku CVS. W PHP 5 ten parametr jest opcjonalny. W PHP 5 i wcześniejszych wersjach jest obowiązkowy. Jeśli pominiemy ten parametr (ustawiony na 0 w wersji PHP 5.0.4 i późniejszych), to długość nie ma ograniczeń, chociaż może to wpłynąć na wydajność wykonania. |
separator | Opcjonalne. Ustaw znak oddzielający pola (dozwolony tylko jeden znak), domyślna wartość to przecinek. |
enclosure |
Opcjonalne. Ustaw znak otaczający pole (dozwolony tylko jeden znak), domyślna wartość to cudzysłów. Parametr został dodany w PHP 4.3.0. |
Wskazówki i komentarze
Komentarz:Puste wiersze w pliku CSV będą zwracane jako tablica zawierająca pojedynczy null, nie będą traktowane jako błąd.
Komentarz:Funkcja jest wrażliwa na ustawienia regionalne. Na przykład, jeśli LANG ustawiony jest na en_US.UTF-8, pliki z kodowaniem jednobajtowym mogą powodować błędy odczytu.
Komentarz:Jeśli PHP nie może rozpoznać znaków końca wiersza pliku Macintosh podczas odczytywania pliku, można włączyć konfigurację uruchomieniową auto_detect_line_endings.
Przykład
Przykład 1
<?php $file = fopen("contacts.csv","r"); print_r(fgetcsv($file)); fclose($file); ?>
Plik CSV:
George, John, Thomas, USA James, Adrew, Martin, USA
Wynik podobny do:
Array ( [0] => George [1] => John [2] => Thomas [3] => USA )
Przykład 2
<?php $file = fopen("contacts.csv","r"); while(! feof($file)) { print_r(fgetcsv($file)); } fclose($file); ?>
Plik CSV:
George, John, Thomas, USA James, Adrew, Martin, USA
Wynik podobny do:
Array ( [0] => George [1] => John [2] => Thomas [3] => USA Array ( [0] => James [1] => Adrew [2] => Martin [3] => USA )