2011-09-21 21 views
8

Bu dizi havalimanı kodları ve şehir adları (yaklaşık 3500 satır) ile var.CSV'yi diziye dönüştürme

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 

Bu dosyayı bir php dizisine dönüştürmem gerekiyor. Bu şimdiye kadar benim kodudur:

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

ben im sonucunda bu oluyor, fgetcsv fonksiyonu için sınırlayıcı ve muhafazasının karakterleri ayarlıyorum rağmen:

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

size MS yerde serpin seviyor olanlar '" 'karakter değil 66 en ve 99 en süslü olduğundan emin misiniz –

+0

gayet Çalışır? . senin 'PHP_VERSION' beni Muhtemelen bir hata (bu hangisi?) Alternatif' var_dump (array_map ("str_getcsv", dosyayı ($ fn))) 'deneyin – mario

+0

@StefanPantke:... Şimdi sen söyleyince aynen öyle olur Bunun dışında bir kayıt var, bu yüzden tanınmayan satır sonları, bu nedenle tırnakların yanlış yorumlanması kabarma. – mario

cevap

18

o linebreaks ise şunları yapabilirsiniz ile kaba kuvvet yöntemi deneyin:

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

str_getcsv PHP 5.3 ile kullanılabilir, veya kılavuzunu bir çözüm olarak, upgradephp veya PHP_Compat ile.

+0

teşekkürler! i $ veri dizi sonucunu geçici bir çözüm yaptı. – andufo

+0

bu çok – Raj

+0

Büyük teşekkür ederim benim sorunu. teşekkür sabit Mükemmel +1 ayrıca bilinmeyen upgradephp için de geçerlidir! – Magico

3

bu deneyin: -

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

çocuğunun EEG

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