2011-12-20 4 views
8

タブ区切りファイルの読み込みに問題があります。私はこのような構造を持つ配列を作成したい、このファイルからPHPでTabdelimitedファイルから構造化配列を作成するには?

Field 1  Field 2  Field 3 
Element11 Element12 Element13 
Element21 Element22 Element23 
Element31 Element32 Element33 

私のファイルの構造がある

$csv = array(
      array( 'Field 1' => 'Element11', 
        'Field 2' => 'Element12', 
        'Field 3' => 'Element13', 

      ), 
      array( 'Field 1' => 'Element21', 
        'Field 2' => 'Element22', 
        'Field 3' => 'Element23', 

      ), 
      array( 'Field 1' => 'Element31', 
        'Field 2' => 'Element32', 
        'Field 3' => 'Element33', 

      )  
     ); 

は、私はこれをどのように行うことができますか?

答えて

17

また、あなたが

$result = array(); 
$fp = fopen('/path/to/file','r'); 
if (($headers = fgetcsv($fp, 0, "\t")) !== FALSE) 
    if ($headers) 
    while (($line = fgetcsv($fp, 0, "\t")) !== FALSE) 
     if ($line) 
     if (sizeof($line)==sizeof($headers)) 
      $result[] = array_combine($headers,$line); 
fclose($fp); 
print_r($result); 
1

fgetcsv()

$result = array(); 
$fp = fopen('/path/to/file','r'); 
while (($line = fgetcsv($fp, 0, "\t")) !== FALSE) if ($line) $result[] = $line; 
fclose($fp); 

print_r($result); 

あなたは、ヘッダー行をスキップしたい場合は、ループに入る前に、一度だけfgets()を呼び出します。あなたは上記の描かれているように、配列を連想になりたい場合は:

$result = array(); 
$fp = fopen('/path/to/file','r'); 
$headers = fgetcsv($fp, 0, "\t"); 
$row = 0; 
while (($line = fgetcsv($fp, 0, "\t")) !== FALSE) if ($line) { 
    for ($col = 0; isset($line[$col]); $col++) { 
    $result[$row][$header[$col]] = $line[$col]; 
    } 
    $row++; 
} 
fclose($fp); 

print_r($result); 
+0

を必要とする配列のキーとしてヘッダを取得するには実際には、ファイルは[C]に有するoMMA [S]ではありません(CSV):) – tim

+2

CSVは「何かで分けられたデータ」と同義語になっています。 "文字分離値" –

+0

@ColHeatherそのため、私は 'fgetcsv()'の第3のパラメータとして '\ t" 'を指定しました。:-D – DaveRandom

関連する問題