多个 CSV 文件到 PHP 数组 -


Multiple CSV files to PHP Array -

我对CSV文件有一些问题。我有大约 50 个 csv 文件,下面看起来都一样。

我需要将它们导入 Php 数组 - (后来我将它们放入 js var 中,并在图表中使用)但是 CSV 看起来不应该做(我无法更改它) - 它的顶部有一些数据(前 10 行) - 我需要在不同的地方使用它们(只需显示它们 - 如"Kategoria:";ROLNICTWO, LEŚNICTWO I ŁOWIECTWO";- 是一个标题)

"Okres sprawozdawczy:";"Dane roczne";
"Kategoria:";"ROLNICTWO, LEŚNICTWO I ŁOWIECTWO";
"Grupa:";"SKUP PRODUKTÓW ROLNYCH";
"Podgrupa:";"Skup produktów na 1 ha użytków rolnych";
"Wymiary:";"Wykaz produktów, Lata";
"Kod";"Jednostka terytorialna";"buraki cukrowe";"buraki cukrowe";"buraki cukrowe";"buraki cukrowe";
"2010";"2011";"2012";"2013";
"[kg]";"[kg]";"[kg]";"[kg]";
"1100000000";" ŁÓDZKIE";"278";"355";"363";"333";
"1140000000";" MAZOWIECKIE";"247";"250";"286";"348";
"2120000000";" MAŁOPOLSKIE";"67";"87";"114";"127";
"2240000000";" ŚLĄSKIE";"168";"218";"245";"281";
"3060000000";" LUBELSKIE";"1139";"1170";"1235";"1346";
"3180000000";" PODKARPACKIE";"249";"208";"342";"404";
"3200000000";" PODLASKIE";"6";"30";"5";"0";
"3260000000";" ŚWIĘTOKRZYSKIE";"479";"482";"337";"534";
"4080000000";" LUBUSKIE";"184";"141";"264";"229";
"4300000000";" WIELKOPOLSKIE";"1102";"1412";"1485";"1532";
"4320000000";" ZACHODNIOPOMORSKIE";"522";"830";"909";"642";
"5020000000";" DOLNOŚLĄSKIE";"1044";"1045";"1274";"1136";
"5160000000";" OPOLSKIE";"1392";"1386";"2113";"1660";
"6040000000";" KUJAWSKO-POMORSKIE";"1588";"2040";"2272";"2252";
"6220000000";" POMORSKIE";"624";"748";"724";"879";
"6280000000";" WARMIŃSKO-MAZURSKIE";"153";"150";"163";"167";

我如何将它们打印为数组 - 看起来像这样:

[0] => Array
      (
      [0] Okres sprawozdawczy
      [1] Dane roczne
      )
[1] => Array
      (
      [0] Kategoria
      [1] ROLNICTWO, LEŚNICTWO I ŁOWIECTWO
      )
[2] => Array
      (
      [0] Grupa:
      [1] SKUP PRODUKTÓW ROLNYCH
      )

等 CSV 行的前 5 行。

但后来从第 7 行(6 为空)-第 7,8,9 行是一个标题。

"Kod" - its "1100000000"
"Jednostka terytorialna" - its "ŁÓDZKIE"
"buraki cukrowe","2010","[kg]" - "278"
"buraki cukrowe","2011","[kg]" - "355"
"buraki cukrowe","2012","[kg]" - "363"
"buraki cukrowe","2013","[kg]" - "333"
  • 一个数据的 3 个标题,所以我需要这样的想法:
[6] => 数组 ([0] buraki cukrowe => 数组 ([0] 2010 => 数组 ([0]
kg => 数组 ([0] 278)

其中"278"是我需要使用并放入 JS VAR 的数据。我不确定这样做的好方法,请帮助我。

首先,在变量上设置此文件,可以像这样使用 file_get_content()

$csvData = file_get_contents('your_file.csv');

您可以为需要添加的所有文件执行此操作

有了$csvData之后,你只需要像这样爆炸和分块

$explodedCsvData = explode(';',$csvData);
$chuckedCsvData = array_chunk($explodedCsvData,2);

这样的东西可以解决问题:

$file = fopen('your-file.csv');
$header = true;
$headers = [];
$data = [];
while($line = fread($file)) {
    if($line === '') { // Transition from headers to columns info
        $header = false;
        $line = fread($file);
        $label = explode(';', $line);
        $l = count($label);
        $year = array_pad(explode(';', fread($file)), -$l, null);
        $unit = array_pad(explode(';', fread($file)), -$l, null);
        $column = [];
        for($i=0; $i<$l; ++$i) {
            $column[] = [
                'label' => $label[$i],
                'year' => $year[$i],
                'unit' => $unit[$i]
            ];
        }
    }
    elseif($header) { // Still in the first lines
        $headers[] = explode(';', $line);
    }
    else { // After the columns parsing
        $data[] = explode(';', $line);
    }
}
fclose($file);