Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP警告:array_combine():两个参数的元素数应该相等-CSV解析不正确?_Php_Csv_Array Combine - Fatal编程技术网

PHP警告:array_combine():两个参数的元素数应该相等-CSV解析不正确?

PHP警告:array_combine():两个参数的元素数应该相等-CSV解析不正确?,php,csv,array-combine,Php,Csv,Array Combine,对于以下CSV文件(3MB): 对于以下代码: <?php $file = fopen("ACDF_cut.csv","r"); $file2 = fopen("ACDF_cut_rounded.csv","w"); /* Map Rows and Loop Through Them */ $rows = array_map('str_getcsv', file('ACDF_cut.csv')); $header = array_shift($rows)

对于以下CSV文件(3MB):

对于以下代码:

<?php

$file = fopen("ACDF_cut.csv","r");
$file2 = fopen("ACDF_cut_rounded.csv","w");


    /* Map Rows and Loop Through Them */
    $rows   = array_map('str_getcsv', file('ACDF_cut.csv'));
    $header = array_shift($rows);
    $csv    = array();
    foreach($rows as $row) {
        $csv[] = array_combine($header, $row);
    }



foreach ($csv as &$product){//Use of & as per https://stackoverflow.com/a/40913938/9095603
    $product['LQ Price'] = number_format($product['LQ Price'],2); 
    $product['AvailableQty'] = number_format($product['AvailableQty']); 
    $product['Net Weight'] = number_format($product['Net Weight'],2); 
}


foreach ($csv as $product) {
  fputcsv($file2, $product);
}


 fclose($file);
 fclose($file2);

然而,它们来自同一个非参差不齐的CSV文件,其中头的数量与每行上的字段数量相匹配。为了让事情变得更混乱,我以前操作过这个文件,从来没有遇到过头和行计数不相等的问题。如何修复此问题?

我怀疑问题在于
file()
无法识别文件中的换行符,因此它将所有内容放在一行中。什么是
count($rows)
?您的csv第8446行的Description1字段中有一个新行,它将中断您的导入。我猜这可能不是唯一的一个。但是,当你可以在
$file
上使用fgetcsv时,为什么你要使用file函数和stru getcsv呢?@Barmar
$rows
count=8552(
$header
count=13)
count($rows)
不相关,重要的是
count($row)
在每一行。我怀疑问题在于
file()
无法识别文件中的换行符,因此它将所有内容放在一行中。什么是
count($rows)
?您的csv第8446行的Description1字段中有一个新行,它将中断您的导入。我猜这可能不是唯一的一个。但是,当你可以在
$file
上使用fgetcsv时,为什么你要使用file函数和stru getcsv呢?@Barmar
$rows
count=8552(
$header
count=13)
count($rows)
是不相关的,重要的是每行上的
count($row)
echo count($header) = 13
echo count($rows) = 8552