使用分隔符

时间:2018-06-15 06:06:13

标签: php

我的问题是我无法将第二个参数传递给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():两个参数的数量应相等   元素

2 个答案:

答案 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);