在PHP

时间:2015-12-05 07:36:36

标签: php arrays csv

我正在通过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个字段是一致的,因此它对"硬编码"是有效的。那是一个常数。

提前致谢。

1 个答案:

答案 0 :(得分:2)

如何将CSV字符串转换为行数组,然后将str_getcsv映射到每一行?

这样的事情是可能的:

$lines = explode("\n", $b64);
$array = array_map('str_getcsv', $lines);

而不是:

$array = str_getcsv($b64);

希望它有所帮助;)