我正在通过Ajax请求将base64编码的CSV文件上传到我的服务器(需要ajax请求)。我正在尝试解析它,所以我有一个多维数组。
CSV文件如下所示:
1, 1, 1, 1, 'Yuliana Arredondo', 'Mi razón social', 'snt@snt.snt', 'aoeaoeaoe1', 'avatar_56627eb7ea174.png', 'CUIH900419RC4', '2015-12-09', '2015-12-23', '2015-12-01', 'SYSTEM-CSV'
1, 1, 1, 1, 'Eduardo de la Cruz', 'Mi razón social', 'snt@snt.snt', 'aoeaoeaoe1', 'avatar_56627eb7ea174.png', 'CUIH900419RC6', '2015-12-09', '2015-12-23', '2015-12-01', 'SYSTEM-CSV'
(据我所知,每个记录用一个输入分隔)
而且,在PHP上我正在尝试:
if($request->input('file')){
$b64 = $request->input('file');
$pos = strpos($b64, ';');
if($pos !== false){
$b64 = base64_decode(preg_replace('#^data:text/\w+;base64,#i', '', $b64));
}
}
$array = str_getcsv($b64);
但是在那个$数组上,我没有得到一个包含2条记录的数组(每一条有14个字段),而是得到一个包含28条记录的普通数组。
我做错了吗?或者它应该像这样工作?如果是这样,有没有解决方法?
在旁注中,14个字段是一致的,因此它对"硬编码"是有效的。那是一个常数。
提前致谢。
答案 0 :(得分:2)
如何将CSV字符串转换为行数组,然后将str_getcsv
映射到每一行?
这样的事情是可能的:
$lines = explode("\n", $b64);
$array = array_map('str_getcsv', $lines);
而不是:
$array = str_getcsv($b64);
希望它有所帮助;)