2011-09-21 77 views
8

Tôi có mảng này với mã sân bay và tên thành phố (khoảng 3500 dòng).Chuyển đổi CSV thành mảng

code,city 
"Abilene, TX ",ABI 
"Adak Island, AK ",ADK 
"Akiachak, AK ",KKI 
"Akiak, AK ",AKI 
"Akron/Canton, OH ",CAK 
"Akuton, AK ",KQA 
"Alakanuk, AK ",AUK 
"Alamogordo, NM ",ALM 

Tôi cần phải chuyển đổi tệp đó thành một mảng php. Đây là mã của tôi cho đến nay:

if(($handle = fopen('test.csv', 'r')) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ',', '"')) !== FALSE) { 
     echo '<pre>'; 
      print_r($data); 
      echo '</pre>'; 
    } 
    fclose($handle); 
} 

Mặc dù tôi đang thiết lập các ký tự dấu phân cách và enclousure cho hàm fgetcsv, im nhận này kết quả là:

Array 
(
    [0] => code 
    [1] => city 
"Abilene 
    [2] => TX " 
    [3] => ABI 
"Adak Island 
    [4] => AK " 
    [5] => ADK 
"Akiachak 
    [6] => AK " 
    [7] => KKI 
"Akiak 
    [8] => AK " 
    [9] => AKI 
"Akron/Canton 
    [10] => OH " 
    [11] => CAK 
"Akuton 
    [12] => AK " 
    [13] => KQA 
"Alakanuk 
    [14] => AK " 
    [15] => AUK 
"Alamogordo 
    [16] => NM " 
    [17] => ALM 
) 
+2

Bạn có chắc chắn đó là những ' "' chars và không phải là ưa thích của 66 và 99 mà MS thích rắc khắp mọi nơi –

+0

Tác phẩm tốt cho? Có lẽ là một lỗi trong 'PHP_VERSION' của bạn. (Nó là gì?) Hoặc thử' var_dump (array_map ("str_getcsv", file ($ fn))) '. – mario

+0

@StefanPantke: Bây giờ bạn nhắc đến nó. một bản ghi ra khỏi nó.Vì vậy, đó là ngắt dòng không được công nhận, do đó các dấu ngoặc kép bị hiểu sai tốt thôi. – mario

Trả lời

18

Nếu đó là xuống hàng, bạn có thể thử các phương pháp brute-force với:

$file = file_get_contents("test.csv"); 
$data = array_map("str_getcsv", preg_split('/\r*\n+|\r+/', $file)); 
print_r($data); 

str_getcsv có sẵn với PHP 5.3, hay như cách giải quyết trong cuốn hướng dẫn, thông qua upgradephp hoặc PHP_Compat.

+0

cảm ơn! i đã giải quyết được kết quả mảng dữ liệu $ – andufo

+0

Tuyệt vời điều này đã khắc phục được sự cố của tôi Cảm ơn rất nhiều – Raj

+0

Rất cảm ơn bạn +1 cũng cho nâng cấp chưa biết !! – Magico

3

Hãy thử điều này: -

ini_set('auto_detect_line_endings', TRUE);/// (PHP's detection of line endings) write at the top. 


$csvrows = array_map('str_getcsv', file($filepath)); 
$csvheader = array_shift($csvrows); 
$csv = array(); 
foreach ($csvrows as $row) { 
    $csv[] = array_combine($csvheader, $row); 
} 
1

try-

$csv = array(); 

if (($file = fopen('test.csv', 'r')) === false) { 
    throw new Exception('There was an error loading the CSV file.'); 
} else { 
    while (($line = fgetcsv($file, 1000)) !== false) { 
     $csv[] = $line; 
    } 
    fclose($handle); 
} 
Các vấn đề liên quan