我的问题是我无法将第二个参数传递给str_getcsv
函数。
$rows = array_map('str_getcsv', file($filePath_product_names_t), [";"]);
$header = array_shift($rows);
$csv = [];
foreach($rows as $row) {
$csv[] = array_combine($header, $row);
}
CSV结构
"25";"some text"; "also some Text"
并且还要警告:
array_combine():两个参数的数量应相等 元素
答案 0 :(得分:5)
试试这个:
$rows = array_map(function($v){return str_getcsv($v, ";");}, file($filePath_product_names_t));
$header = array_shift($rows);
$csv = [];
foreach($rows as $row) {
$csv[] = array_combine($header, $row);
}
print_r($rows);
答案 1 :(得分:0)
结合这两个问题,第一个是你不能按照你在array_map()
中尝试的方式传递参数,所以在我在评论中发布的链接中,你可以创建一个匿名函数这样做。
第二种情况是,在某些情况下,CSV文件并不总是拥有文件中一行的所有数据。在这种情况下,标题行和其他行不具有相同数量的数据,因此请使用array_pad()
添加空格以确保它们具有相同的长度。将这些结合到代码中......
$rows = array_map(function($data) { return str_getcsv($data,";");}
, file($filePath_product_names_t));
$header = array_shift($rows);
$csv = [];
foreach($rows as $row) {
$row = array_pad($row, count($header), "");
$csv[] = array_combine($header, $row);
}
print_r($csv);