CSV to bardzo sympatyczny format zapisu danych tabelarycznych. Zapisuje się w nim dane za pomocą tekstu oddzielając kolumny przecinkiem a rekordy znakiem nowej linii. To powoduje, że surowe dane są w pewnym stopniu możliwe do przeglądania przez człowieka. Do jego postaci często eksportuje się bazy danych. Jest obok XMLa i JSONa najpopularniejszym formatem do tego typu działań.
W tym przewodniku pokażę jak wczytać plik CSV do tablicy i wygenerować prostą tabelkę aby sprawdzić czy wszystko się nam dobrze zaczytało. Potem stworzyć drugą tablicę i wyeksportować ją do pliku.
Wczytywanie pliku z danymi
Przygotujmy sobie jakieś dane. Na przykład takie:
A,B,D,3,2,1,1,0,1,0,1 C,D,E,7,8,5,1,1,0,0,1 F,H,G,9,2,0,1,0,1,0,0 B,B,D,3,2,1,0,0,0,0,1 D,D,E,7,8,5,0,0,1,0,0 Y,H,G,9,2,1,0,1,0,1,0 P,B,D,3,2,2,0,1,0,1,1 B,D,E,7,8,6,0,0,0,1,1 N,H,G,9,2,1,1,1,1,0,0 M,B,D,3,2,2,1,0,1,0,0 Z,D,E,7,8,6,1,1,1,1,1 X,H,G,9,2,1,0,0,0,0,0
Załóżmy że są to jakieś ważne dane, na których chcemy przeprowadzać obliczenia lub wprowadzić je do innej bazy. Zapisujemy jako zwykły plik tekstowy ale z rozszerzeniem .csv czyli plik nazywamy przykładowo „dane.csv”.
Kod PHP wczytujący CSV będzie wyglądał tak:
(Założyłem, że plik jest w tym samym folderze co skrypt w php)
<?php $data = array_map('str_getcsv', file('dane.csv'));
Być może trudno w to uwierzyć, ale to wszystko. Za pomocą instrukcji print_r($data) można sobie sprawdzić.
Możemy dla treningu wygenerować sobie przyjazną tabelę HTML na podstawie tablicy za pomocą:
if (count($data) > 0): ?> <table> <?php foreach ($data as $row): array_map('htmlentities', $row); ?> <tr> <td><?php echo implode('</td><td>', $row); ?></td> </tr> <?php endforeach; ?> </table> <?php endif; ?>
Efekt po ostylowaniu powinien wyglądać tak:
Zapisywanie pliku z danymi
Skoro nauczyliśmy się wczytywać fajnie by było opanować zapisywanie.
Odwróćmy dla urozmaicenia kolejność danych w nadrzędnej tablicy:
$data2 = array_reverse($data);
Teraz zapiszmy tablicę dwuwymiarową $data2 do pliku CSV. Instrukcja będzie wyglądać tak:
$fp = fopen('dane2.csv', 'w'); foreach ($data2 as $row) { fputcsv($fp, $row); } fclose($fp);
Po uruchomieniu programu powinien nam się stworzyć osobny plik dane2.csv
Jak widać zgodnie z intencjami zapisał się nam plik z odwróconą kolejnością „wierszy”:
Podsumowanie
Jak widać PHP ma wbudowaną prostą funkcję do parsowania plików CSV. Jeżeli interesuje cię import danych z plików Excel, zapoznaj się z dedykowanym artykułem: Import danych z plików Excel do aplikacji PHP.
Odpowiedz lub skomentuj