如何拆分数组复合键值至独立键值对?CSV数组处理问题
解决CSV转PHP关联数组的格式问题
嘿,我瞅你现在用PHP处理CSV文件的时候遇到了点小麻烦——生成的数组键是一整串表头,而不是每个单独的字段名对吧?咱们来捋一捋问题出在哪,然后搞定它。
你的当前代码
$csv = array_map('str_getcsv', file($file)); array_walk($csv, function(&$a) use ($csv) { $a = array_combine($csv[0], $a); }); array_shift($csv);
当前得到的数组结构
[0] => Array ( [Label;Account;Registered;Licensed;User;UserLicense] => Test;Test;No;No;test;no; )
你期望的数组结构
[0] => Array ( [Label] => Test [Account] => Test ... )
问题根源
问题出在str_getcsv的默认分隔符上!这个函数默认用**逗号,作为字段分隔符,但你的CSV文件明显是用分号;**来分隔字段的。所以它把整一行当成了一个字段,自然表头和内容都变成了单个字符串。
修改后的解决方案
只需要给str_getcsv加上第二个参数,指定分隔符为分号;就行,完整代码如下:
// 读取CSV时指定分号作为分隔符 $csv = array_map(function($line) { return str_getcsv($line, ';'); }, file($file)); // 将表头作为键与每一行内容关联 array_walk($csv, function(&$row) use ($csv) { $row = array_combine($csv[0], $row); }); // 移除表头行 array_shift($csv);
验证结果
修改后,生成的数组就会变成你期望的结构:每个字段名(Label、Account等)作为键,对应的值也会正确拆分出来。
内容的提问来源于stack exchange,提问作者TETJE
相关产品推荐
相关产品推荐

