2011-09-21 35 views
8

Tengo esta matriz con códigos de aeropuertos y nombres de ciudades (alrededor de 3500 líneas).Convirtiendo CSV a la matriz

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 

Necesito convertir ese archivo en una matriz php. Este es mi código hasta ahora:

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

Aunque Soy la creación de los caracteres delimitadores y enclousure para la función fgetcsv, im conseguir esto como resultado:

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

¿Seguro esos son '" 'caracteres y no la fantasía de 66 y de 99 que la EM ama a rociar todas partes –

+0

funciona bien para? Probablemente un error en tu 'PHP_VERSION'. (¿Cuál es?) Alternativamente prueba con' var_dump (array_map ("str_getcsv", file ($ fn))). – mario

+0

@StefanPantke: Ahora que lo mencionas. Se pone exactamente un registro fuera de él. Por lo tanto, son los saltos de línea los que no se reconocen, por lo tanto, las citas se malinterpretan. hinchar. – mario

Respuesta

18

Si se trata de los saltos de línea, que pueda probar el método de fuerza bruta con:

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

str_getcsv está disponible con PHP 5.3, o como solución alternativa en el manual, a través de upgradephp o PHP_Compat.

+0

gracias! Hice una solución al resultado del array $ data. – andufo

+0

Excelente esto solucionó mi problema. Muchas gracias – Raj

+0

Gracias +1 también para la actualización desconocidaphp !! – Magico

3

Prueba esto: -

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

prueba-

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