PHP - Handle CSV File

Hello there, future PHP wizards! Today, we're going to embark on an exciting journey into the world of CSV files and how to handle them using PHP. As your friendly neighborhood computer teacher, I promise to make this adventure as fun and enlightening as possible. So, grab your virtual wands (keyboards), and let's dive in!

PHP - Handle CSV File

What is a CSV File?

Before we start coding, let's understand what we're dealing with. CSV stands for "Comma-Separated Values." It's a simple file format used to store tabular data, like spreadsheets or databases. Each line in the file represents a row of the table, and the values in each row are separated by commas.

For example, a CSV file might look like this:

Name,Age,City
John Doe,30,New York
Jane Smith,25,London
Bob Johnson,40,Paris

Now that we know what CSV files are, let's learn how to work with them in PHP!

The fgetcsv() Function

Our first magical spell for handling CSV files is the fgetcsv() function. This function reads a line from a file and parses it into an array using a specified delimiter (usually a comma).

Basic Usage

Here's a simple example of how to use fgetcsv():

<?php
$file = fopen("data.csv", "r");

while (($data = fgetcsv($file)) !== FALSE) {
    print_r($data);
}

fclose($file);
?>

Let's break this down:

  1. We open the file "data.csv" in read mode using fopen().
  2. We use a while loop to read the file line by line.
  3. fgetcsv($file) reads a line and converts it to an array.
  4. We print each array using print_r().
  5. Finally, we close the file with fclose().

Advanced Usage

Now, let's spice things up a bit! What if our CSV uses a different delimiter, like a semicolon? No problem! fgetcsv() has got us covered:

<?php
$file = fopen("data.csv", "r");

while (($data = fgetcsv($file, 1000, ";")) !== FALSE) {
    echo "Name: " . $data[0] . ", Age: " . $data[1] . ", City: " . $data[2] . "<br>";
}

fclose($file);
?>

In this example, we've added two more parameters to fgetcsv():

  • The second parameter (1000) is the maximum line length to read.
  • The third parameter (";") specifies the delimiter.

We're also formatting our output to make it more readable. Isn't that neat?

The fputcsv() Function

Now that we've mastered reading CSV files, let's learn how to create them! Enter fputcsv(), our spell for writing CSV files.

Basic Usage

Here's a simple example:

<?php
$data = array(
    array('Name', 'Age', 'City'),
    array('John Doe', '30', 'New York'),
    array('Jane Smith', '25', 'London'),
    array('Bob Johnson', '40', 'Paris')
);

$file = fopen('new_data.csv', 'w');

foreach ($data as $row) {
    fputcsv($file, $row);
}

fclose($file);

echo "CSV file created successfully!";
?>

Let's break it down:

  1. We create an array of arrays, where each inner array represents a row in our CSV.
  2. We open a new file 'new_data.csv' in write mode.
  3. We loop through our data array and use fputcsv() to write each row to the file.
  4. We close the file and print a success message.

Advanced Usage

Let's get fancy and add some options to our fputcsv() function:

<?php
$data = array(
    array('Name', 'Favorite Quote'),
    array('Shakespeare', 'To be, or not to be'),
    array('Einstein', 'Imagination is more important than knowledge')
);

$file = fopen('quotes.csv', 'w');

foreach ($data as $row) {
    fputcsv($file, $row, '|', '"', '\\');
}

fclose($file);

echo "Quotes CSV file created successfully!";
?>

In this example, we're using additional parameters of fputcsv():

  • The third parameter ('|') sets the delimiter to a pipe character.
  • The fourth parameter ('"') sets the enclosure character.
  • The fifth parameter ('\') sets the escape character.

This is useful when your data might contain commas or other special characters.

Putting It All Together

Now, let's combine our reading and writing skills to create a CSV file converter!

<?php
// Read from semicolon-separated CSV
$input_file = fopen("input.csv", "r");
$output_file = fopen("output.csv", "w");

while (($data = fgetcsv($input_file, 1000, ";")) !== FALSE) {
    // Write to comma-separated CSV
    fputcsv($output_file, $data);
}

fclose($input_file);
fclose($output_file);

echo "CSV file converted successfully!";
?>

This script reads a semicolon-separated CSV file and writes its contents to a new comma-separated CSV file. Magic, isn't it?

Conclusion

Congratulations, young PHP wizards! You've just learned the essentials of handling CSV files in PHP. Remember, practice makes perfect, so don't be afraid to experiment with these functions. Who knows? You might just become the next CSV sorcerer supreme!

Here's a quick reference table of the methods we've learned:

Function Purpose Basic Syntax
fgetcsv() Read CSV file fgetcsv($file, $length, $delimiter, $enclosure, $escape)
fputcsv() Write CSV file fputcsv($file, $fields, $delimiter, $enclosure, $escape)

Happy coding, and may your CSV files always be properly formatted!

Credits: Image by storyset