【问题标题】:CSV data to array_map and str_getcsv using delimiterCSV 数据到 array_map 和 str_getcsv 使用分隔符
【发布时间】:2018-06-15 06:06:13
【问题描述】:

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

【问题讨论】:

  • 分享你的 $filePath_product_names_t 的内容
  • 示例:25;"Text";"Text"
  • stackoverflow.com/questions/27599767/… 将有助于解决第一个问题。
  • 阅读错误信息,它清楚地说明了问题所在。

标签: php


【解决方案1】:

试试这个:

$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);

【讨论】:

    【解决方案2】:

    结合这两个问题,第一个是您无法像在array_map() 中尝试的方式传递参数,因此在我发布在 cmets 中的链接中,您可以创建一个匿名函数来执行此操作。

    第二个问题是,在某些情况下,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);
    

    【讨论】:

      猜你喜欢
      • 2015-01-30
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多