dongzai3917
2014-11-27 08:14
浏览 52

多个CSV文件到PHP阵列 -

i have some problems with CSV files. I have about 50 csv files, all looks the same like this below.

I need to import them into Php array - (later i put them into js var, and use in diagrams) But the CSV dont looks like should do (i cant change it) - It have some data at top (first 10 lines) - i need to use them in different places (just show them - like "Kategoria:";"ROLNICTWO, LEŚNICTWO I ŁOWIECTWO"; - is a title)

"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";

How i can print them as array - to looks like this:

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

etc. first 5 lines of CSV lines.

But later from line 7 (6 is empty) - line 7,8,9 is one header..

"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 headers for one data, so i need i think something like that:
[6] => Array ([0] buraki cukrowe => Array ([0] 2010 => Array ([0] kg => Array ([0] 278)

Where the "278" is data what i need to use and put in to JS VAR. Im not sure its good way to do this, please help me out..

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dousidan1279 2014-11-27 08:28
    已采纳

    First you set this file on variable, you can use file_get_content() like this

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

    you can do it for all the files you need to add

    After you have your $csvData you just have to explode and chunk it like this

    $explodedCsvData = explode(';',$csvData);
    $chuckedCsvData = array_chunk($explodedCsvData,2);
    
    已采纳该答案
    打赏 评论
  • douli0531 2014-11-27 08:31

    Something like that could do the trick :

    $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);
    
    打赏 评论

相关推荐 更多相似问题