2016-03-19 23 views
0

私はfgetcsvで.csv(元々は外部データベースから来た)ファイルからデータを読み込んでいます。 .csvファイルの最初の行には列名が含まれ、次の行にはデータが格納されます。 これまでのところ、列名を持つ配列と、.csvファイルの行(配列としての各行)を持つ2番目の配列があります。 2番目の配列を連想配列に変換するには、どのキーを最初の配列の列名にするのですか?.csvから得られたインデックス配列を連想配列に変換する

アレイ(サイズ= 1) 0 => アレイ(サイズ= 50) 0 =>文字列 'KHK_EAN'(長さ=:ここ

// this is for Mac OS X 
ini_set("auto_detect_line_endings", true); 

// the name of the file to read 
$fileName = 'WebArtikel_V1-modified.csv'; 

// open file (get handle to file) 
$file = fopen($fileName, 'r'); 

// the array to store the csv's data 
$rawData = array(); 
// the first line of the csv 
$header = array(); 

$i = 0; 
while (($line = fgetcsv($file, 4096, ";")) !== FALSE) { 
    //$line is an array of the csv elements 
    //print_r($line); 
    if($i == 0){ 
     $header[] = $line; 
    } else { 
     $rawData[] = $line; 
    } 
    $i++; 
} 
fclose($file); 

はのvar_dump($ヘッダ)であります7) 1 =>文字列 'StyleNumber'(長さ= 11) 2 =>文字列 'スタイル名'(長さ= 9) 3 =>文字列 'SETNAME'(長さ= 7) 4 =>文字列 'ColorNumber'(長さ= 11) 5 =>文字列 'ColorName'(長さ= 9) 6 =>文字列 'StyleSize' (長さ= 9) 7 =>文字列 'KHK_Artikel'(長さ= 11) 8 =>文字列 'PriceNew'(長さ= 8) 9 =>文字列 'PriceSale'(長さ= 9)

注:列名を持つ別の配列を含む1要素の最上位配列があります。

ザ$ RAWDATA配列:

アレイ(サイズ= 3604) 0 => アレイ(サイズ= 50) 0 =>文字列 '4055765008989'(長さ= 13) 1 =>列'長さ= 8') 3 =>文字列 'ACCESS 3' >文字列 'Blau/Marine'(長さ= 11) 6 =>文字列 '1'(長さ= 1) 7 =>文字列 '201001001-2942-1'(長さ= 16) 8 =>文字列 '199,9'(長さ= 5) 9文字列 '199,9'(長さ= 5) 1 => 配列(サイズ= 50) 0 =>文字列 '4055765008996'長さ= 13) 1 =>文字列 '201001001'(長さ= 9) 2 =>文字列 ''(長さ= 1) 3 =>文字列 'ACCESS 3'(長さ= 8) 4 =>文字列 '3924 'length(長さ= 4) 5 =>文字列' Beige/Braun '(長さ= 11) 6 =>文字列' 1 '(長さ= 1) 7 =>文字列' 201001001-3924-1 ' ) 8文字列 '199,9'(length = 5) 9文字列 '199,9'(length = 5) 2 => 配列(size = 50) 0 =>文字列 '405 (長さ= 1)3 =>文字列 'ACCESS 3'(長さ= 8) 4 =>文字列 '文字列 '2942'(長さ= 4) 5 =>文字列 'Blau/Marine'(長さ= 11) 6 =>文字列 '1'(長さ= 1) 7 =>文字列 '201002001-2942-1'長さ= 16) 8 =>文字列 '179,9'(長さ= 5) 9 =>文字列 '179,9'(長さ= 5)

注:上記と同様、ネストされた配列、そう私はarray_combine()を使うことはできません。 提案がありますか?

答えて

1

これはここと同じ質問ですか?便宜上下にコピーする。

$csv = array_map("str_getcsv", file("file1.csv",FILE_SKIP_EMPTY_LINES)); 
$keys = array_shift($csv); 

をあなたが適用できる素敵な連想配列にすべての行を有効にするには:あなたが使用することができ、一度にすべてを読み出すため

how do i parse a csv file to grab the column names first then the rows that relate to it?

foreach ($csv as $i=>$row) { 
    $csv[$i] = array_combine($keys, $row); 
} 
+0

はい、私はその質問も見ました。しかし、csvファイルの区切り文字はセミコロンであるため、これは機能しません。コンマではないので、区切り文字を指定できるので、fgetcsv()を使う必要があります。 – mrd

+0

ファイルでセミコロンが使用されているため、動作しませんか?コメントにはこれもありました:別のセパレータを使う方法:$ file = file( "file1.csv"、FILE_SKIP_EMPTY_LINES); $ csv = array_map( "str_getcsv"、$ file、array_fill(0、count($ file)、 ';')); – James

関連する問題