CSV to Associative Array

前端 未结 6 1426
孤城傲影
孤城傲影 2020-11-28 05:58

I\'ve seen numerous examples on how to take a CSV file and then create an associative array with the headers as the keys.

For example:

Brand,Model,Pa         


        
6条回答
  •  我在风中等你
    2020-11-28 06:32

    Here is a solutions that will work by specifying a local file or URL. You can also switch the association on and off. Hopefully this helps.

    class CSVData{
        public $file;
        public $data;
        public $fp;
        public $caption=true;
        public function CSVData($file=''){
            if ($file!='') getData($file);
        }
        function getData($file){
            if (strpos($file, 'tp://')!==false){
                copy ($file, '/tmp/csvdata.csv');
                if ($this->fp=fopen('/tmp/csvdata.csv', 'r')!==FALSE){
                    $this->readCSV();
                    unlink('tmp/csvdata.csv');
                }
            } else {
                $this->fp=fopen($file, 'r');
                $this->readCSV();
            }
            fclose($this->fp);
        }
        private function readCSV(){
            if ($this->caption==true){
                if (($captions=fgetcsv($this->fp, 1000, ","))==false) return false;
            }
            $row=0;
            while (($data = fgetcsv($this->fp, 1000, ",")) !== FALSE) {
                for ($c=0; $c < count($data); $c++) {
                    $this->data[$row][$c]=$data[$c];
                    if ($this->caption==true){
                        $this->data[$row][$captions[$c]]=$data[$c];
                    }
                }
                $row++;
            }
        }
    }
    

    Try this usage:

    $o=new CSVData();
    $o->getData('/home/site/datafile.csv');
    $data=$o->data;
    print_r($data);
    

提交回复
热议问题