ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel

How to Use fgetcsv in PHP (csv file manipulations)

Updated on May 7, 2012

What you will accomplish

PHP fgetcsv()
PHP fgetcsv() | Source

Summary

A function that will make your life easier for quick and painless import of a CSV (comma separated values) file into your PHP script.

My Setup - WAMP Server

In order to program in PHP on Windows I will be using WAMP server. For an easy setup refer to my WAMP Server Tutorial.

fgetcsv_PHP.php

<?php

fgetcsv_PHP();

function fgetcsv_PHP()
{
    /*
     * See if we can open a file named fgetcsv.csv in
     * read mode, if we can then assign pointer to this
     * file to a variable named $handle
     * 'r' - Open for reading only; place the file
     *  pointer at the beginning of the file.
     */
    if (($handle = fopen("./delimitedValues.csv", "r")) !== FALSE)
    {
        /*
         * fgetcsv( resource $handle  int $length  string $delimiter )
         *
         * resource $handle
         * A valid file pointer to a file successfully opened by fopen(),
         * popen(), or fsockopen().
         *
         * int $length
         * Must be greater than the longest line (in characters) to be
         * found in the CSV file (allowing for trailing line-end characters).
         * It became optional in PHP 5. Omitting this parameter (or setting
         * it to 0 in PHP 5.0.4 and later) the maximum line length is not
         * limited, which is slightly slower.
         *
         * string $delimiter
         * Set the field delimiter (one character only).
         *
         * RETURN VALUES
         *
         * Returns an indexed array containing the fields read.
         *
         * Note: A blank line in a CSV file will be returned as an array
         *       comprising a single null field, and will not be treated
         *       as an error.
         *
         * Note: If PHP is not properly recognizing the line endings when
         *       reading files either on or created by a Macintosh computer,
         *       enabling the auto_detect_line_endings run-time configuration
         *       option may help resolve the problem.
         *
         * fgetcsv() returns NULL if an invalid handle is supplied or FALSE
         * on other errors, and when the end of file has been reached.
         */


        $length = 1000;
        $delimiter = "|";

        /*
         * Print the opening table tag to begin buiding HTML table
         * and the first row of the table; with column names
         */
        echo "<table>\n";
        echo "<td><b>Name</b></td><td><b>Surname</b></td><td><b>Email</b></td>";

        /*
         * Loop through the array of values returned by fgetcsv until there are
         * no more lines (indicated by FALSE)
         */
        while ( ( $data = fgetcsv( $handle, $length, $delimiter ) ) !== FALSE )
        {
            // Count number of array elements in $data
            $num = count($data);
            // Print opening table row HTML tag
            echo "<tr>\n";

            /*
             * Loop through the $data array and output each element
             * wrapped by opening and closing table data HTML tags
             */
            for ($c=0; $c < $num; $c++)
            {
                echo "<td>".$data[$c]."</td>\n";
            }

            // Print closing table row HTML tag
            echo "</tr>\n";
        }

        // Print close table HTML tag
        echo "</table>";

        // Close the file pointed to by $handle
        fclose($handle);
    }
}

?> 

CSV file

Here are the contents of the CSV file. Note: I deliberately chose a pipe character("|") as my delimiter to show that any character or character set can be used for delimiting your values.

delimitedValues.csv

John|Smith|jsmith@somemail.com
John|Doe|jdoe@somemail.com
Jane|Doe|jdoe1@somemail.com

The result of using fgetcsv_PHP.php

Source

Explanation

Now that you have seen the PHP script you might want a more high level explanation of what is going on. Simply put, fgetcsv is specialized file parser that helps developers reading the data and importing that data into their PHP scripts, and then doing whatever it is they need to do with the data.

In my PHP program I decided to import some fictitious data to show what the function can do. I am taking the data from the file "delimitedValues.csv" and constructing an HTML table out of that data, which is then displayed in a browser.

This function can be very useful if used for importing a lot of data into your scripts. For example you could be scanning your grocery receipts, then you could convert your scanned receipts into csv files, perform some formatting, and then you could add everything to your database using fgetcsv.

Hope you enjoyed this tutorial and if something is not clear please leave a comment and I'll get back to you asap!

Custom CSV Data Processing

Recently I got a comment asking about how to display a particular row or rows of data. More specifically how to display row number 1 and 4 out of 10 rows of CSV data. I thought this was a good question and decided to incorporate the answer as an addition to the article.

So the code snippet that follows is a modification to the code I showed above without any comments (green text). Essentially I added a condition that checks the number of the row and if the condition is met then the code block is executed (parsing the row of data to create html code).

To be able to count the rows that I have already processed with the fgetcsv() function I added a variable called $i that acts as a row counter. Every time I process a row of CSV data I add 1 to the $i variable and thus keep track of my rows.

The condition checks to see if the variable $i is equal to 0 or 3 ($i is initially equal to 0 not 1), and if this is true, the code in curly brackets is executed.

Custom CSV Data Processing Code Snippet

<?php
fgetcsv_PHP();

function fgetcsv_PHP()
{
    if (($handle = fopen("./delimitedValues_10rows.csv", "r")) !== FALSE)
    {
        $length = 1000;
        $delimiter = "|";
        echo "<table>\n";
        echo "<td><b>Name</b></td><td><b>Surname</b></td><td><b>Email</b></td>";

        $i = 0; // ADDED
        while ( ( $data = fgetcsv( $handle, $length, $delimiter ) ) !== FALSE )
        {
	    if( $i == 0 || $i == 3 ) // ADDED
	    {
                $num = count($data);
                echo "<tr>\n";

                for ($c=0; $c < $num; $c++)
                {
                    echo "<td>".$data[$c]."</td>\n";
                }    
                echo "</tr>\n";
	    }
	    $i++; // ADDED
        }
        echo "</table>";
        fclose($handle);
    }
}
?> 

fgetcsv usage

Do you understand how to use fgetcsv function after reading this article?

See results

Comments

    0 of 8192 characters used
    Post Comment

    • profile image

      JoeW 

      4 years ago

      2 years later and still extremely useful. Thank you for posting this!

    • kievan profile imageAUTHOR

      kievan 

      5 years ago

      You're welcome :)

    • profile image

      thucbk 

      5 years ago

      thanks

    • profile image

      Udhaya 

      6 years ago

      Nice to read.

      Thanks,

      Udhayakumar G K

      http://phppapers.blogspot.in/

    • kievan profile imageAUTHOR

      kievan 

      6 years ago

      Hey Anto, thanks for a great question.

      I have made an addition to the article that answers your question. Let me know if you understand.

    • profile image

      Anto 

      6 years ago

      Say i have 10 rows for example. I want to display row 1 and 4 only. How would i do it?

    • profile image

      preet 

      6 years ago

      can u pls explain it once agan... i m new to php

    working

    This website uses cookies

    As a user in the EEA, your approval is needed on a few things. To provide a better website experience, hubpages.com uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

    For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at: https://hubpages.com/privacy-policy#gdpr

    Show Details
    Necessary
    HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
    LoginThis is necessary to sign in to the HubPages Service.
    Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
    AkismetThis is used to detect comment spam. (Privacy Policy)
    HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
    HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
    Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
    CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
    Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the googleapis.com or gstatic.com domains, for performance and efficiency reasons. (Privacy Policy)
    Features
    Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
    Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
    Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
    Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
    Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
    VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
    PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
    Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
    MavenThis supports the Maven widget and search functionality. (Privacy Policy)
    Marketing
    Google AdSenseThis is an ad network. (Privacy Policy)
    Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
    Index ExchangeThis is an ad network. (Privacy Policy)
    SovrnThis is an ad network. (Privacy Policy)
    Facebook AdsThis is an ad network. (Privacy Policy)
    Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
    AppNexusThis is an ad network. (Privacy Policy)
    OpenxThis is an ad network. (Privacy Policy)
    Rubicon ProjectThis is an ad network. (Privacy Policy)
    TripleLiftThis is an ad network. (Privacy Policy)
    Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
    Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
    Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
    Statistics
    Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
    ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
    Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)