У меня есть этот массив с кодами аэропортов и названиями городов (около 3500 строк).
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
Мне нужно преобразовать этот файл в php-массив. Это мой код:
if(($handle = fopen('test.csv', 'r')) !== FALSE) { while (($data = fgetcsv($handle, 1000, ',', '"')) !== FALSE) { echo '<pre>'; print_r($data); echo '</pre>'; } fclose($handle); }
Хотя я устанавливаю символы разделителя и enclousure для функции fgetcsv, я получаю это как результат:
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 )
Если это разрывы строк, вы можете попробовать метод грубой силы с помощью:
$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 или как обходной путь в руководстве, через upgradephp или PHP_Compat .
Попробуй это:-
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); }
пытаться-
$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); }