0

I am importing a CSV but unfortunately the csv number values are importing as strings, I have tried turning the strings into integers & float values by casting (int) & (float) and by using intval() & floatval() but I get 0 and 0 in result and in database the values are stored as 0 and 0.00 as well because the fields are strictly added to accept only integer and float values not strings.

So how can I fix it?

I have used a function as well to encode it but still the same result:

/**
 * Convert csv source data into correct encoding data  
 * 
 */
protected function encodeField($field) {
    return iconv(mb_detect_encoding($field, mb_detect_order(), true), "iso-8859-1", $field);
}

My array looks like this:

[02-Aug-2018 12:22:36 Europe/Berlin] Array
(
    [1] => Array
        (
            [name] => Upstairs at Clarette
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "1"
            [total_call_per] => "0.07"
            [effective_calls] => "1"
            [effective_per] => "100.00"
            [ineffective_calls] => "0"
            [ineffective_per] => "0.00"
            [unique_calls] => "1"
            [unique_per] => "100.00"
        )

    [2] => Array
        (
            [name] => Blacks Members Club
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "1"
            [total_call_per] => "0.07"
            [effective_calls] => "1"
            [effective_per] => "100.00"
            [ineffective_calls] => "0"
            [ineffective_per] => "0.00"
            [unique_calls] => "1"
            [unique_per] => "100.00"
        )

    [3] => Array
        (
            [name] => Madison Roof Top Bar & Restaurant
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "8"
            [total_call_per] => "0.54"
            [effective_calls] => "8"
            [effective_per] => "100.00"
            [ineffective_calls] => "0"
            [ineffective_per] => "0.00"
            [unique_calls] => "8"
            [unique_per] => "100.00"
        )

    [4] => Array
        (
            [name] => Orphans Yard
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "0"
            [total_call_per] => "0.00"
            [effective_calls] => "0"
            [effective_per] => ""
            [ineffective_calls] => "0"
            [ineffective_per] => ""
            [unique_calls] => "0"
            [unique_per] => ""
        )

    [5] => Array
        (
            [name] => Oui 2 Rooms
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "7"
            [total_call_per] => "0.47"
            [effective_calls] => "7"
            [effective_per] => "100.00"
            [ineffective_calls] => "0"
            [ineffective_per] => "0.00"
            [unique_calls] => "5"
            [unique_per] => "71.43"
        )

    [6] => Array
        (
            [name] => Oval Space
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "7"
            [total_call_per] => "0.47"
            [effective_calls] => "4"
            [effective_per] => "57.14"
            [ineffective_calls] => "3"
            [ineffective_per] => "42.86"
            [unique_calls] => "6"
            [unique_per] => "85.71"
        )

    [7] => Array
        (
            [name] => OXO2
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "0"
            [total_call_per] => "0.00"
            [effective_calls] => "0"
            [effective_per] => ""
            [ineffective_calls] => "0"
            [ineffective_per] => ""
            [unique_calls] => "0"
            [unique_per] => ""
        )

    [8] => Array
        (
            [name] => Painters' Hall
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "0"
            [total_call_per] => "0.00"
            [effective_calls] => "0"
            [effective_per] => ""
            [ineffective_calls] => "0"
            [ineffective_per] => ""
            [unique_calls] => "0"
            [unique_per] => ""
        )

    [9] => Array
        (
            [name] => Dining Room at Clarette
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "0"
            [total_call_per] => "0.00"
            [effective_calls] => "0"
            [effective_per] => ""
            [ineffective_calls] => "0"
            [ineffective_per] => ""
            [unique_calls] => "0"
            [unique_per] => ""
        )

    [10] => Array
        (
            [name] => Park Lane Club London
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "0"
            [total_call_per] => "0.00"
            [effective_calls] => "0"
            [effective_per] => ""
            [ineffective_calls] => "0"
            [ineffective_per] => ""
            [unique_calls] => "0"
            [unique_per] => ""
        )

    [11] => Array
        (
            [name] => Park Village Studios
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "0"
            [total_call_per] => "0.00"
            [effective_calls] => "0"
            [effective_per] => ""
            [ineffective_calls] => "0"
            [ineffective_per] => ""
            [unique_calls] => "0"
            [unique_per] => ""
        )

    [12] => Array
        (
            [name] => Patron Bar a Vin
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "0"
            [total_call_per] => "0.00"
            [effective_calls] => "0"
            [effective_per] => ""
            [ineffective_calls] => "0"
            [ineffective_per] => ""
            [unique_calls] => "0"
            [unique_per] => ""
        )

    [13] => Array
        (
            [name] => PAUSE BAR
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "1"
            [total_call_per] => "0.07"
            [effective_calls] => "1"
            [effective_per] => "100.00"
            [ineffective_calls] => "0"
            [ineffective_per] => "0.00"
            [unique_calls] => "1"
            [unique_per] => "100.00"
        )

    [14] => Array
        (
            [name] => Peckham Springs
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "6"
            [total_call_per] => "0.40"
            [effective_calls] => "6"
            [effective_per] => "100.00"
            [ineffective_calls] => "0"
            [ineffective_per] => "0.00"
            [unique_calls] => "4"
            [unique_per] => "66.67"
        )

    [15] => Array
        (
            [name] => School of Wok
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "0"
            [total_call_per] => "0.00"
            [effective_calls] => "0"
            [effective_per] => ""
            [ineffective_calls] => "0"
            [ineffective_per] => ""
            [unique_calls] => "0"
            [unique_per] => ""
        )

    [16] => Array
        (
            [name] => Penton Street Gallery
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "1"
            [total_call_per] => "0.07"
            [effective_calls] => "1"
            [effective_per] => "100.00"
            [ineffective_calls] => "0"
            [ineffective_per] => "0.00"
            [unique_calls] => "1"
            [unique_per] => "100.00"
        )

    [17] => Array
        (
            [name] => Pewterers' Hall
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "3"
            [total_call_per] => "0.20"
            [effective_calls] => "1"
            [effective_per] => "33.33"
            [ineffective_calls] => "2"
            [ineffective_per] => "66.67"
            [unique_calls] => "1"
            [unique_per] => "33.33"
        )

    [18] => Array
        (
            [name] => Piccadilly Chambers
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "0"
            [total_call_per] => "0.00"
            [effective_calls] => "0"
            [effective_per] => ""
            [ineffective_calls] => "0"
            [ineffective_per] => ""
            [unique_calls] => "0"
            [unique_per] => ""
        )

    [19] => Array
        (
            [name] => Piccadilly Institute
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => "1"
            [total_call_per] => "0.07"
            [effective_calls] => "1"
            [effective_per] => "100.00"
            [ineffective_calls] => "0"
            [ineffective_per] => "0.00"
            [unique_calls] => "1"
            [unique_per] => "100.00"
        )
)

My CSV Import Code:

/**
 * import mediahawk csv and store data 
 * 
 * @param sfWebRequest $request
 */
public function executeImportMediahawkCsv(sfWebRequest $request) {
    $this->form = new importMediahawkStatForm();
    $this->form->setDefault('month', date('m'));
    $this->form->setDefault('year', date('Y'));
    $this->exceptions = $this->notRelatedRecords = array();
    if ($request->isMethod('POST')) {
        $params = $request->getParameter($this->form->getName());
        $files = $request->getFiles($this->form->getName());
        $this->form->bind($params, $files);
        if ($this->form->isValid()) {
            $month = $params['month'];
            $year = $params['year'];
            $oldData = Doctrine::getTable('MediahawkStat')->findByMonthAndYear($month, $year);
            $file = $files['file']['tmp_name'];
            $handle = fopen($file, "r");
            $csvRecords = array();
            $venueNames = array(); // store venue names
            $i = 0;
            while ($data = fgetcsv($handle, 1000, ",", "'")) {
                if ($i > 0 && trim($data['0']) != 'Totals') {
                    $name = str_replace('"', '', $data['0']);
                    $venueNames[] = $this->encodeField($name);
                    $csvRecords[$i]['name'] = $name;
                    $csvRecords[$i]['month'] = $month;
                    $csvRecords[$i]['year'] = $year;
                    $csvRecords[$i]['status'] = '';
                    $csvRecords[$i]['total_calls'] = $data['3'];
                    $csvRecords[$i]['total_call_per'] = $data['4'];
                    $csvRecords[$i]['effective_calls'] = $data['5'];
                    $csvRecords[$i]['effective_per'] = $data['6'];
                    $csvRecords[$i]['ineffective_calls'] = $data['7'];
                    $csvRecords[$i]['ineffective_per'] = $data['8'];
                    $csvRecords[$i]['unique_calls'] = $data['9'];
                    $csvRecords[$i]['unique_per'] = $data['10'];
                }
                $i++;
            }
            error_log(print_r($csvRecords, true));
            // Store csv data in table
            if (count($csvRecords) > 0) {
                // Fetch venue ids by venue names
                $venueIds = Doctrine::getTable('Location')->getIdsByNames($venueNames);
                foreach ($csvRecords as $csvRecord) {
                    $venueName = strtolower($csvRecord['name']);
                    $venueId = isset($venueIds[$venueName]) ? $venueIds[$venueName] : '';
                    try {
                        if (isset($oldData[$venueId])) {
                            $stat = $oldData[$venueId];
                        } else {
                            $stat = new MediahawkStat();
                        }

                        if ($venueId)
                            $stat->setLocationId($venueId);
                            $stat->setCampaign($csvRecord['name']);
                            $stat->setMonth($csvRecord['month']);
                            $stat->setYear($csvRecord['year']);
                            $stat->setStatus($csvRecord['status']);
                            $stat->setTotalCalls($csvRecord['total_calls']);
                            $stat->setTotalPercent($csvRecord['total_call_per']);
                            $stat->setEffectiveCalls($csvRecord['effective_calls']);
                            $stat->setEffectivePercent($csvRecord['effective_per']);
                            $stat->setIneffectiveCalls($csvRecord['ineffective_calls']);
                            $stat->setIneffectivePercent($csvRecord['ineffective_per']);
                            $stat->setUniqueCalls($csvRecord['unique_calls']);
                            $stat->setUniquePercent($csvRecord['unique_per']);
                            $stat->save();
                        if (!$venueId) {
                            $csvRecord['id'] = $stat->getId();
                            $this->notRelatedRecords[] = $csvRecord;
                        }
                    } catch (Exception $e) {
                        $this->exceptions[] = $csvRecord;
                    }
                }
                if (count($this->exceptions) == 0 && count($this->notRelatedRecords) == 0) {
                    echo '<script type="text/javascript">
                            window.parent.$.fancybox.close();
                            alert("Data imported successfully");
                            window.parent.mediahawk_stat_load_table();
                          </script>';
                } else {
                    echo '<script type="text/javascript">
                            alert("Data imported successfully");
                            window.parent.mediahawk_stat_load_table();
                          </script>';
                }
            }
        }
    }
    $this->setLayout(false);
}

The CSV File Structure looks like this:

"Venue Name","","","Total Calls","Total %","Effective Calls","Effective %","Ineffective Calls","Ineffective %","Unique Calls","Unique %"
"Upstairs at Clarette","","","1","0.07","1","100.00","0","0.00","1","100.00"
"Blacks Members Club","","","1","0.07","1","100.00","0","0.00","1","100.00"
"Madison Roof Top Bar & Restaurant","","","8","0.54","8","100.00","0","0.00","8","100.00"
"Orphans Yard","","","0","0.00","0","","0","","0",""
"Oui 2 Rooms","","","7","0.47","7","100.00","0","0.00","5","71.43"
"Oval Space","","","7","0.47","4","57.14","3","42.86","6","85.71"
"OXO2","","","0","0.00","0","","0","","0",""
"Painters' Hall","","","0","0.00","0","","0","","0",""
"Dining Room at Clarette","","","0","0.00","0","","0","","0",""
"Park Lane Club London","","","0","0.00","0","","0","","0",""
"Park Village Studios","","","0","0.00","0","","0","","0",""
"Patron Bar a Vin","","","0","0.00","0","","0","","0",""
"PAUSE BAR","","","1","0.07","1","100.00","0","0.00","1","100.00"
"Peckham Springs","","","6","0.40","6","100.00","0","0.00","4","66.67"
"School of Wok","","","0","0.00","0","","0","","0",""
"Penton Street Gallery","","","1","0.07","1","100.00","0","0.00","1","100.00"
"Pewterers' Hall","","","3","0.20","1","33.33","2","66.67","1","33.33"
"Piccadilly Chambers","","","0","0.00","0","","0","","0",""
"Piccadilly Institute","","","1","0.07","1","100.00","0","0.00","1","100.00"
"Pop Brixton","","","5","0.34","5","100.00","0","0.00","4","80.00"
"Porchester Hall","","","1","0.07","1","100.00","0","0.00","1","100.00"
"Portland House","","","0","0.00","0","","0","","0",""
"Portobello Star","","","2","0.13","2","100.00","0","0.00","2","100.00"
"Prince of Peckham","","","1","0.07","1","100.00","0","0.00","1","100.00"
"Prince Philip House","","","0","0.00","0","","0","","0",""
"Private Dining Room at Albert's Club","","","0","0.00","0","","0","","0",""
"Proud Camden","","","0","0.00","0","","0","","0",""
"Proud Country House","","","3","0.20","2","66.67","1","33.33","2","66.67"
"Proud East","","","0","0.00","0","","0","","0",""
"Provender Warehouse","","","0","0.00","0","","0","","0",""
"Bocconcino","","","0","0.00","0","","0","","0",""
"Putney Studio","","","0","0.00","0","","0","","0",""
"Noho Showrooms","","","6","0.40","6","100.00","0","0.00","6","100.00"
"Quaglino's","","","0","0.00","0","","0","","0",""
"Radio Rooftop","","","1","0.07","1","100.00","0","0.00","1","100.00"
"Rail House Cafe","","","0","0.00","0","","0","","0",""
"Raven's Ait","","","0","0.00","0","","0","","0",""
"Refettorio Felix","","","3","0.20","3","100.00","0","0.00","2","66.67"
"Regent Street Cinema","","","7","0.47","4","57.14","3","42.86","4","57.14"
"Regent's Conferences & Events","","","1","0.07","0","0.00","1","100.00","1","100.00"
"RIBA Venues","","","0","0.00","0","","0","","0",""
"Rich Mix","","","2","0.13","2","100.00","0","0.00","2","100.00"
"Rida East","","","0","0.00","0","","0","","0",""
"River & Rowing Museum","","","4","0.27","4","100.00","0","0.00","4","100.00"
"Darbaar Restaurant","","","0","0.00","0","","0","","0",""
"Riverside Rooms","","","0","0.00","0","","0","","0",""
"Riverside Walkway","","","0","0.00","0","","0","","0",""
"Roast","","","0","0.00","0","","0","","0",""
"Royal London Suites","","","1","0.07","1","100.00","0","0.00","1","100.00"
"Colomba","","","3","0.20","1","33.33","2","66.67","3","100.00"
"Home House","","","0","0.00","0","","0","","0",""
"Rolling Stock","","","1","0.07","0","0.00","1","100.00","1","100.00"
"Many Hands Bermondsey","","","10","0.67","9","90.00","1","10.00","7","70.00"
"Roma","","","0","0.00","0","","0","","0",""
"Record Street Studios","","","0","0.00","0","","0","","0",""
"House 21","","","0","0.00","0","","0","","0",""
"Roundhouse","","","1","0.07","1","100.00","0","0.00","1","100.00"
"U Block","","","0","0.00","0","","0","","0",""
"Royal Horticultural Halls","","","6","0.40","6","100.00","0","0.00","6","100.00"
"Royal Institution of Great Britain","","","1","0.07","1","100.00","0","0.00","1","100.00"
"The Boiler House","","","0","0.00","0","","0","","0",""
"Rye London","","","0","0.00","0","","0","","0",""
"S&L Lounge","","","1","0.07","1","100.00","0","0.00","1","100.00"
"Saatchi Gallery","","","3","0.20","3","100.00","0","0.00","3","100.00"
"Sager & Wilde","","","0","0.00","0","","0","","0",""
"Sake no Hana","","","0","0.00","0","","0","","0",""
"Salut!","","","0","0.00","0","","0","","0",""
"Sans Pere Shoreditch","","","4","0.27","0","0.00","4","100.00","2","50.00"
"Searcys at 30 Pavilion Road","","","0","0.00","0","","0","","0",""
"Searcys Vintners' Hall","","","0","0.00","0","","0","","0",""
"Shaka Zulu","","","2","0.13","2","100.00","0","0.00","1","50.00"
"SHED","","","0","0.00","0","","0","","0",""
"Shoreditch Platform","","","4","0.27","4","100.00","0","0.00","3","75.00"
"Shoreditch Roundabout","","","0","0.00","0","","0","","0",""
"Shoreditch Studios","","","7","0.47","7","100.00","0","0.00","5","71.43"
"Shoreditch Town Hall","","","3","0.20","2","66.67","1","33.33","3","100.00"
"Shoreditch Treehouse","","","12","0.81","7","58.33","5","41.67","12","100.00"
"Simulacra Studio","","","0","0.00","0","","0","","0",""
"Six Storeys on Soho","","","0","0.00","0","","0","","0",""
"Sizona","","","9","0.61","8","88.89","1","11.11","6","66.67"
"Sky Garden","","","4","0.27","0","0.00","4","100.00","2","50.00"
"SMITHS' of Smithfield","","","1","0.07","1","100.00","0","0.00","1","100.00"
"Sorted","","","0","0.00","0","","0","","0",""
"South Place Hotel","","","6","0.40","5","83.33","1","16.67","2","33.33"
"Space 25","","","2","0.13","2","100.00","0","0.00","1","50.00"
"Speech Room","","","0","0.00","0","","0","","0",""
"Square Suite","","","1","0.07","1","100.00","0","0.00","1","100.00"
2
  • Have you tried intval() and floatval() functions ? Like $csvRecords[$i]['total_call_per'] = floatval($data['4']); Commented Aug 2, 2018 at 10:36
  • Yes, sorry I forgot to mention those as well. Updated the question now. Commented Aug 2, 2018 at 10:39

1 Answer 1

1

After struggling with it for quite some while trying different things at last the simple str_replace() function helped and wrote the following simple function to do the job:

/**
 * Remove quotes from the numerical values
 */
protected function removeQuotes($field) {
    return str_replace('"', '', $field);
}

After applying the above function to all of the fields, everything works perfectly okay now:

Updated code part:

    $name = $this->removeQuotes($data['0']);
    $venueNames[] = $this->encodeField($name);
    $csvRecords[$i]['name'] = $name;
    $csvRecords[$i]['month'] = $month;
    $csvRecords[$i]['year'] = $year;
    $csvRecords[$i]['status'] = '';
    $csvRecords[$i]['total_calls'] = $this->removeQuotes($data['3']);
    $csvRecords[$i]['total_call_per'] = $this->removeQuotes($data['4']);
    $csvRecords[$i]['effective_calls'] = $this->removeQuotes($data['5']);
    $csvRecords[$i]['effective_per'] = $this->removeQuotes($data['6']);
    $csvRecords[$i]['ineffective_calls'] = $this->removeQuotes($data['7']);
    $csvRecords[$i]['ineffective_per'] = $this->removeQuotes($data['8']);
    $csvRecords[$i]['unique_calls'] = $this->removeQuotes($data['9']);
    $csvRecords[$i]['unique_per'] = $this->removeQuotes($data['10']);

The correct array output now:

[02-Aug-2018 13:52:36 Europe/Berlin] Array
(
    [1] => Array
        (
            [name] => Upstairs at Clarette
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => 1
            [total_call_per] => 0.07
            [effective_calls] => 1
            [effective_per] => 100.00
            [ineffective_calls] => 0
            [ineffective_per] => 0.00
            [unique_calls] => 1
            [unique_per] => 100.00
        )

    [2] => Array
        (
            [name] => Blacks Members Club
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => 1
            [total_call_per] => 0.07
            [effective_calls] => 1
            [effective_per] => 100.00
            [ineffective_calls] => 0
            [ineffective_per] => 0.00
            [unique_calls] => 1
            [unique_per] => 100.00
        )

    [3] => Array
        (
            [name] => Madison Roof Top Bar & Restaurant
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => 8
            [total_call_per] => 0.54
            [effective_calls] => 8
            [effective_per] => 100.00
            [ineffective_calls] => 0
            [ineffective_per] => 0.00
            [unique_calls] => 8
            [unique_per] => 100.00
        )

    [4] => Array
        (
            [name] => Orphans Yard
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => 0
            [total_call_per] => 0.00
            [effective_calls] => 0
            [effective_per] => 
            [ineffective_calls] => 0
            [ineffective_per] => 
            [unique_calls] => 0
            [unique_per] => 
        )

    [5] => Array
        (
            [name] => Oui 2 Rooms
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => 7
            [total_call_per] => 0.47
            [effective_calls] => 7
            [effective_per] => 100.00
            [ineffective_calls] => 0
            [ineffective_per] => 0.00
            [unique_calls] => 5
            [unique_per] => 71.43
        )

    [6] => Array
        (
            [name] => Oval Space
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => 7
            [total_call_per] => 0.47
            [effective_calls] => 4
            [effective_per] => 57.14
            [ineffective_calls] => 3
            [ineffective_per] => 42.86
            [unique_calls] => 6
            [unique_per] => 85.71
        )

    [7] => Array
        (
            [name] => OXO2
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => 0
            [total_call_per] => 0.00
            [effective_calls] => 0
            [effective_per] => 
            [ineffective_calls] => 0
            [ineffective_per] => 
            [unique_calls] => 0
            [unique_per] => 
        )

    [8] => Array
        (
            [name] => Painters' Hall
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => 0
            [total_call_per] => 0.00
            [effective_calls] => 0
            [effective_per] => 
            [ineffective_calls] => 0
            [ineffective_per] => 
            [unique_calls] => 0
            [unique_per] => 
        )

    [9] => Array
        (
            [name] => Dining Room at Clarette
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => 0
            [total_call_per] => 0.00
            [effective_calls] => 0
            [effective_per] => 
            [ineffective_calls] => 0
            [ineffective_per] => 
            [unique_calls] => 0
            [unique_per] => 
        )

    [10] => Array
        (
            [name] => Park Lane Club London
            [month] => 7
            [year] => 2018
            [status] => 
            [total_calls] => 0
            [total_call_per] => 0.00
            [effective_calls] => 0
            [effective_per] => 
            [ineffective_calls] => 0
            [ineffective_per] => 
            [unique_calls] => 0
            [unique_per] => 
        )
)
Sign up to request clarification or add additional context in comments.

1 Comment

Right, Your CSV file must already be generated without quotes for numerical values.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.