代码之家  ›  专栏  ›  技术社区  ›  Umair Shah

将csv数字字符串转换为整数和浮点值?

  •  0
  • Umair Shah  · 技术社区  · 6 年前

    我正在导入一个csv,但不幸的是,csv数值作为字符串导入,我尝试通过强制转换将字符串转换为整数和浮点值。 (int) 和; (float) 通过使用 intval() 和; floatval() 但我明白了 0 在结果和数据库中,值存储为 0.00 另外,因为严格地添加字段是为了只接受整数值和浮点值,而不是字符串。

    那我该怎么修呢?

    我也使用了一个函数对其进行编码,但结果仍然相同:

    /**
     * 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);
    }
    

    我的数组如下:

    [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"
            )
    )
    

    我的csv导入代码:

    /**
     * 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);
    }
    

    csv文件结构如下:

    "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"
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Umair Shah    6 年前

    经过一段时间的挣扎,终于尝试了不同的东西 str_replace() 函数帮助并编写了以下简单函数来完成此项工作:

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

    在将上述功能应用到所有字段后,现在一切都正常工作:

    更新的代码部分:

        $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']);
    

    现在正确的数组输出:

    [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] => 
            )
    )