【问题标题】:PHP: storing lines from a csv into arraysPHP:将csv中的行存储到数组中
【发布时间】:2018-10-30 18:12:37
【问题描述】:

CSV 文件看起来像这样:

user_id, fname, lname, country
001, cake, chocolate, US
002, ice cream, vanilla, US
003, pie, pumpkin, US

我想将它们中的每一个保存到一个数组中,例如:

Array ( [0] => Array ( [0] => user_id [1] => fname [2] => lname [3] => country)
        [1] => Array ( [0] => 001 [1] => cake [2] => chocolate [3] => US)
        [2] => Array ( [0] => 002 [1] => ice cream [2] => vanilla [3] => US)
        [3] => Array ( [0] => 003 [1] => pie [2] => pumpkin [3] => US) 
) 

目前我的代码看起来像这样,但它只保存了最后一个元素:

$file = fopen('csvexample.csv', 'r');
$i = 0;
while (($line = fgetcsv($file)) !== FALSE) {
    //$line is an array of the csv elements
    $arr = array($i => $line);
    $i++;
}
fclose($file);
print_r($arr);

请帮忙!不知道我错过了什么

【问题讨论】:

    标签: php arrays excel file csv


    【解决方案1】:

    str_getcsv

    $arr = array_map('str_getcsv', file('csvexample.csv'));
    

    【讨论】:

      【解决方案2】:

      像这样简单地添加到你的数组中

      $file = fopen('csvexample.csv', 'r');
      $arr = [];  // init the array just for completness
      
      while (($line = fgetcsv($file)) !== FALSE) {
          $arr[] = $line;
      }
      fclose($file);
      print_r($arr);
      

      【讨论】:

        【解决方案3】:

        虽然这不是您要求的,但我相信关联数组更合适。 (除非你有理由说数组格式)。

        我分解这些行并使用第一行作为键,稍后我使用 array_combine 使其成为关联数组。

        $str ="user_id, fname, lname, country
        001, cake, chocolate, US
        002, ice cream, vanilla, US
        003, pie, pumpkin, US";
        
        $arr = explode("\n", $str); //explode on new line
        $keys = explode(", ",array_splice($arr, 0,1)[0]); // get headers to $keys
        
        //loop the array by reference with '&'
        foreach($arr as &$sub){
            $sub = array_combine($keys, explode(", ", $sub)); // change the string into an associative array
        }
        unset($sub); //unset reference
        var_dump($arr); //output
        

        输出:

        array(3) {
          [0]=>
          array(4) {
            ["user_id"]=>
            string(3) "001"
            ["fname"]=>
            string(4) "cake"
            ["lname"]=>
            string(9) "chocolate"
            ["country"]=>
            string(2) "US"
          }
          [1]=>
          array(4) {
            ["user_id"]=>
            string(3) "002"
            ["fname"]=>
            string(9) "ice cream"
            ["lname"]=>
            string(7) "vanilla"
            ["country"]=>
            string(2) "US"
          }
          [2]=>
          array(4) {
            ["user_id"]=>
            string(3) "003"
            ["fname"]=>
            string(3) "pie"
            ["lname"]=>
            string(7) "pumpkin"
            ["country"]=>
            string(2) "US"
          }
        }
        

        https://3v4l.org/354iT


        也许更好的是让主数组键是用户 ID,如本例所示:https://3v4l.org/hMLil

        【讨论】:

          猜你喜欢
          • 2013-11-06
          • 2018-04-01
          • 2012-07-19
          • 1970-01-01
          • 1970-01-01
          • 2013-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多