2011-12-20 22 views
8

Tôi gặp sự cố khi đọc tệp phân tách tab.Làm thế nào để tạo mảng có cấu trúc từ tệp Tabdelimited với PHP?

Cấu trúc trong hồ sơ của tôi là:

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

Từ tập tin này, tôi muốn tạo một mảng với cấu trúc này:

$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', 

      )  
     ); 

Làm thế nào tôi có thể làm điều này?

Trả lời

17

Để cũng có được các tiêu đề như phím mảng bạn cần

$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); 

Nếu bạn muốn bỏ qua dòng tiêu đề, chỉ cần gọi fgets() một lần trước khi bạn nhập vào vòng lặp. Hoặc nếu bạn muốn mảng được kết hợp như mô tả ở trên:

$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

Trên thực tế, các tập tin không phải là [C] omma [S] eperated (CSV) :) – tim

+2

CSV đã trở thành từ đồng nghĩa cho .. tốt, "dữ liệu được phân cách bởi một cái gì đó", và như một đồng nghiệp trở lại trong những ngày được sử dụng để nói; "Giá trị tách biệt ký tự" –

+0

@ColHeather Đó là lý do tại sao tôi cung cấp '" \ t "' làm tham số thứ ba cho 'fgetcsv()' ... :-D – DaveRandom

Các vấn đề liên quan