array_map() 仅适用于数组的第一个元素

array_map() is only applying to the first element of the array

我正在使用以下调用:

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

第一行正确解析为数组,但第二行仍为字符串。 CSV分隔符在测试文件中是一致的(分号),没有发现任何奇怪的字符。如果我添加 sep=;,文件将在 Excel 中正常打开。什么问题可能导致这种情况?

这是对 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 上下文中不正确。