How to extract data from csv file in PHP

前端 未结 11 1295
醉酒成梦
醉酒成梦 2020-11-22 07:36

I have a csv file which looks like this

$lines[0] = \"text, with commas\", \"another text\", 123, \"text\",5;
$lines[1] = \"some without commas\", \"another          


        
相关标签:
11条回答
  • 2020-11-22 08:07

    I've built an application to extract data from a CSV file , this php application was used to show a daily quote for users.

    The full project on github: 365-quotes-php-csv.

    Also this is the class Code for the application i've built

      <?php
    /*
    Main Class 
    please note :
    1- the CSV file must be comma separated (,) and each line must End with (;).
    2- Feel free to edit the all.CSV file and add all of your 366 New Quotes.
    3- don't change any thing specially the CSV file Location.
    ---------------------------------------------------------------------------
    RISS.WORK all copy rights reserved 2018
    please Don't Remove
    Github/RissWork
    Email : info@riss.work
    */
    class Quote{
    
        //properties
            private $_quote,$_allQuotes;
            private static $_instance = null;
    
        //Constructor
            private function __construct(){
                //Day Count
                $dayCount = date(z);
    
                if($this->readCsvAndGetQuote($dayCount)){
                    return $this->getQuote();
                }else{
                    echo 'Error Cannot open the .CSV File';
                }
            }
    
    
    
    
    
        //Methods
    
        //get Instance
        public function getInstance(){
                if(!isset(self::$_instance)){
                    self::$_instance = new Quote();
                }
                return self::$_instance;
            }//end of get Instance
    
    
    
    
        //get daily Quote   
        public function getQuote(){
                return $this->_quote;
            }//end of get Quote
    
    
    
    
        //Read CSV
        private function readCsvAndGetQuote($dayCount = 1 ){
    
            if(($handel = fopen("csv/all.csv" , "r")) !== false){
                $this->_allQuotes = fgetcsv($handel,1000000,';');
                $this->_quote = explode(',',$this->_allQuotes[$dayCount]);
                return true;
            }
            return false;
    
        }//end of read CSV
    
    
    
    }//end of Class
    
    0 讨论(0)
  • 2020-11-22 08:08

    here is also a simple method to get read csv file.

    $sfp = fopen('/path/to/source.csv','r'); 
    $dfp = fopen('/path/to/destination.csv','w'); 
    while ($row = fgetcsv($sfp,10000,",","")) { 
     $goodstuff = ""; 
     $goodstuff = str_replace("¦",",",$row[2]); 
     $goodstuff .= "\n"; 
     fwrite($dfp,$goodstuff); 
    } 
    fclose($sfp); 
    fclose($dfp);
    
    0 讨论(0)
  • 2020-11-22 08:08

    Maybe my code solves your problem:

    // Parse all content from csv file and generate array from line.
    function csv_content_parser($content) {
      foreach (explode("\n", $content) as $line) {
        // Generator saves state and can be resumed when the next value is required.
        yield str_getcsv($line);
      }
    }
    // Get content from csv file.
    $content = file_get_contents('your_file.csv');
    // Create one array from csv file's lines.
    $data = array();
    foreach (csv_content_parser($content) as $fields) {
      array_push($data, $fields);
    }
    

    In result you have an array with all values from csv. It would be something like:

    Array
    (
        [0] => Array
            (
                [0] => text, with commas
                [1] => another text
                [2] => 123
                [3] => text
                [4] => 5
            )
    
        [1] => Array
            (
                [0] => some without commas
                [1] => another text
                [2] => 123
                [3] => text
            )
    
        [2] => Array
            (
                [0] => some text, with comma,s or no
                [1] =>  NULL 
                [2] => 123
                [3] => text
            )
    
    )
    
    0 讨论(0)
  • 2020-11-22 08:09

    You could use something like https://github.com/htmlburger/carbon-csv that allows column mapping:

    $csv = new \Carbon_CSV\CsvFile('path-to-file/filename.csv');
    $csv->set_column_names([
        0 => 'first_name',
        1 => 'last_name',
        2 => 'company_name',
        3 => 'address',
    ]);
    foreach ($csv as $row) {
        print_r($row);
    }
    

    The result of the below code would be something like:

    Array
    (
        [0] => Array
            (
                [first_name] => John
                [last_name] => Doe
                [company_name] => Simple Company Name
                [address] => Street Name, 1234, City Name, Country Name
            )
        [1] => Array
            (
                [first_name] => Jane
                [last_name] => Doe
                [company_name] => Nice Company Name
                [address] => Street Name, 5678, City Name, Country Name
            )
    )
    

    Another library that does the same thing(and much more) is http://csv.thephpleague.com/9.0/reader/

    0 讨论(0)
  • 2020-11-22 08:12

    you can read the data using the following function.

      function readCSV() {
        $csv = array_map('str_getcsv', file('data.csv'));
        array_shift($csv); //remove headers
    
    
    }
    

    http://www.pearlbells.co.uk/how-to-sort-a1a2-z9z10aa1aa2-az9az10-using-php/

    0 讨论(0)
  • 2020-11-22 08:15

    Return a php mapping array with the column of interests :

    public function extractCSVDatas($file_uri) {
        $AliasToSystemPathMappingArray = [];
        if (($handle = fopen($file_uri, "r")) !== FALSE) {
          $csv = array_map('str_getcsv', file($file_uri));
    
          //remove header and choose columns among the list:
          foreach((array_slice($csv,1)) as $line) {
            list($id, $alias, $systemPath) = explode(';',$line[0]);
            $AliasToSystemPathMappingArray[] = [$alias, $systemPath];
          }
          fclose($handle);
        }
        return $AliasToSystemPathMappingArray;
      }
    
    0 讨论(0)
提交回复
热议问题