php - array_map() 仅适用于数组的第一个元素
问题描述
我正在使用以下调用:
$csv = array_map('str_getcsv', file($file), array($delimiter, '"', "\\"));
第一行被正确解析为一个数组,但第二行仍然是一个字符串。CSV 分隔符在测试文件中是一致的(分号),没有我能找到的奇怪字符。如果我添加sep=;
. 什么问题可能导致这种情况?
解决方案
这是对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 的上下文中不正确。
推荐阅读
- java - Hibernate Envers 也审计 oneToMany 端,即使它没有任何变化
- mariadb - mariadb 5.5 上的异常“flat, BNL join”
- reactjs - 在 Typescript 中使用自定义接口扩展 Immutable.js 字段
- nestjs - 如何解决:无法使用自定义路径找到模块“@entities/user”?
- bootstrap-4 - 如何在桌面视图中同时使用引导 corousel 幻灯片图像如何在移动视图中停止它?
- swiftui - 在不影响外框的情况下使用 SwiftUI GeometryReader?
- c++ - ZBar 无法从图像中解码有效的条形码
- xamarin - Xamarin 表单自动隐藏 Toolbar 和 TabBar
- mysql - MySQL IF THEN 不能使用多个 IF THEN ELSEIF
- c# - MongoDb驱动c#查询优化