0

I am having one csv file with three columns and Name , month and expanses. The file name is : name.csv. The file format is like this.

NAME    MONTH   EXPANSES
JHON    JAN     200
GATES   JAN     150
JHON    MAR     150
BILL    APP     100

Whereas I am having one php file: name.php which will fetch the required data from the csv file and the sours code is:

<?php
$x="JHON"; // to be checked in the first column
  $handle = fopen("name.csv","r")or die("file dont exist");
  $output = '';
   while (!feof($handle )){
    $data = fgetcsv($handle,4096,",");
        if(($data[0] ==$x)){
           $output .= sprintf( "Month: %s     Expanses: %d)<br>", 
           $data[1], $data[2]);
        }
    }
echo $output;
fclose($handle);
?>

I want to sort out where the name is “JHON”, with the above code and the result is as following.

Month:  JAN            Expanses:  200 
Month:  MAR           Expanses:  150 
Month:  AUG           Expanses:  250

But what I want is heading like: Expanses of JHON and at bottom, total expenses: amount

MONTH WISE EXPANSES OF JHON 
Month:  JAN            Expanses:  200 
Month:  MAR           Expanses:  150 
Month:  AUG           Expanses:  250

TOTAL EXPANCES:   600

Can anybody help me in correcting the php code please?

Pkarls
  • 35
  • 3
  • 18
Mohan
  • 109
  • 1
  • 9
  • 3
    Possible duplicate of [How to extract data from csv file in PHP](http://stackoverflow.com/questions/2805427/how-to-extract-data-from-csv-file-in-php) – NormundsP Mar 18 '16 at 08:37
  • My question differs from the question you referred. – Mohan Mar 18 '16 at 09:05

2 Answers2

0

use following function

function fetchCSV($filename, $header = true, $delimiter = ',') 
{
    if (!file_exists($filename) || !is_readable($filename)) 
    {
        return FALSE;
    }
    $data = array();
    $header_data = array();

    if (($handle = fopen($filename, 'r')) !== FALSE) 
    {
        $r = 0;
        while (($row = fgetcsv($handle, 0, $delimiter)) !== FALSE) 
        {
            if ($header && $r == 0) 
            {
                $header_data = $row;               
            } 
            else 
            {
                if ($header)
                {
                    for($i = 0; $i < count ($row); $i++)
                    {
                        $data[$r][$header_data[$i]] = $row[$i];
                    }
                }
                else
                {
                    $data[$r] = $row;
                }
            }
            $r++;
        }
        fclose($handle);
    }
    return $data;
}

$data = fetchCSV("file.csv", true);
Hardeep Singh
  • 743
  • 1
  • 8
  • 18
0

Actually you already exctract data from your CSV. As far I understand it you only want to add a header at the top and a sum at the bottom.

Why not just do something like this?

<?php
    $x="JHON"; // to be checked in the first column
    $handle = fopen("name.csv","r") or die("file doesn't exist");
    $output = '';
    $total = 0;

    while (!feof($handle )){
        $data = fgetcsv($handle, 4096, ",");
        if(($data[0] == $x)){
            $output .= sprintf( "Month: %s     Expenses: %d)<br>", $data[1], $data[2]);

            $total += $data[2];
        }
    }

    fclose($handle);

    echo "MONTHLY EXPENSES OF " . $x . "<br/><br/>";
    echo $output . "<br/><br/>";
    echo "TOTAL EXPENSES:   " . $total;
?>

Remark 2: It's "expense", "expance" is not a word

KarmaEDV
  • 1,631
  • 16
  • 27