首页 > 解决方案 > array_map() 仅适用于数组的第一个元素

问题描述

我正在使用以下调用:

$csv = array_map('str_getcsv', file($file), array($delimiter, '"', "\\"));

第一行被正确解析为一个数组,但第二行仍然是一个字符串。CSV 分隔符在测试文件中是一致的(分号),没有我能找到的奇怪字符。如果我添加sep=;. 什么问题可能导致这种情况?

标签: phpcsvarray-map

解决方案


这是对array_map工作方式的误解(文档中的语言相当混乱)。

取给定的片段:

$csv = array_map('str_getcsv', file($file), array($delimiter, '"', "\\"));

这在功能上类似于执行以下操作:

str_getcsv('line one of $file', $delimiter);
str_getcsv('line two of $file', '"');
str_getcsv('line three of $file', "\\");

这就是为什么第一行似乎起作用的原因,因为分隔符是正确的,但随后的行不正确,因为第二个参数在 CSV 的上下文中不正确。


推荐阅读