У меня есть файл .CSV в кодировке UTF-16. Разделитель полей - это запятая (,), а разделитель строк - двойные кавычки ("). Изменение кодировки вне PHP не вариант. Мне нужно превратить его в ассоциативный массив с PHP. Но я не могу получить это признать, что кодировка UTF-16.
Вот содержимое моего файла для numbers.csv :
"Phone number"
"+1 55500718"
"+1 55551919"
Я успешно загрузил этот файл (, используя Laravel Framework )
$file = $request->file('numbers-file');
$filename = $file->getPathName();
У меня также есть пользовательская функция csvToAssocArray (), которая превращает ее в ассоциативный массив. Я использую mb_convert_encoding для преобразования UTF-16 в UTF-8.
function csvToAssocArray($filename) {
$csvAsArray = array_map(function($data) {
return str_getcsv(mb_convert_encoding($data, 'UTF-8', 'UTF-16'), ",");
}, file($filename));
$header = array_shift($csvAsArray);
$csv = array();
foreach ($csvAsArray as $row) {
$csv[] = array_combine($header, $row);
}
return $csv;
}
Но конечный результат print_r (csvToAssocArray ($ filename)) выглядит так:
array:3 [▼
0 => array:1 [▼
"∀倀栀漀渀攀 渀甀洀戀攀爀∀" => "+1 55500718"
]
1 => array:1 [▼
"∀倀栀漀渀攀 渀甀洀戀攀爀∀" => "+1 55551919"
]
]