Php 比较2个csv中的列是否匹配回显和

Php 比较2个csv中的列是否匹配回显和,php,csv,sum,compare,Php,Csv,Sum,Compare,需要帮助我有2个csv文件 一月.csv共3列: 02Jan2020 Marilyn 31570.29 02Jan2020 Nancy 30000.00 06Jan2020 John 1570.29 06Jan2020 Nancy 5000.00 10Jan2020 Marilyn 570.29 10Jan2020 Nancy 10000.00 .... etc suppliers.csv Marilyn John Nancy ..et

需要帮助我有2个csv文件

一月.csv
共3列:

02Jan2020   Marilyn 31570.29    
02Jan2020   Nancy   30000.00
06Jan2020   John    1570.29 
06Jan2020   Nancy   5000.00
10Jan2020   Marilyn 570.29  
10Jan2020   Nancy   10000.00 
.... etc
suppliers.csv

Marilyn
John
Nancy
..etc
现在,我想将所有与
suppliers.csv

Nancy 30000.00
Nancy 5000.00
Nancy 10000.00
echo sum   45000.00
我是在研究过这个之后开始的,但不确定比较是否正确,以及如何对返回值求和

$filename="january.csv";
$base="suppliers.csv"; 
$NOWcodes = array();

$file = fopen($base, 'r'); //registred opened 
while (($line = fgetcsv($file)) !== FALSE) { array_push($NOWcodes, $line[0]);  }
fclose($file);

$file = fopen($filename, 'r'); //all nomes 
while (($line = fgetcsv($file)) !== FALSE) {

if(!in_array($line[0],$NOWcodes)){ } //Not sure how to do it here

echo array_sum($sum)."\n";

fclose($file);

CSV文件中的数据仅由一个分隔符分隔。显示的数据必须采用此格式,以便正确读取。我使用了一个单独的空间作为一月.csv

供应商存储在一个数组中

$filename = "january.csv";
$base = "suppliers.csv"; 

$suppliers = [];
$file = fopen($base, 'r');
while (($line = fgetcsv($file)) !== FALSE) {
  $suppliers[] = $line[0];
}
fclose($file);
然后可以在进一步的for循环中检查供应商和分组/求和

$file = fopen($filename, 'r');
$sum = [];
while (($row = fgetcsv($file,0," ")) !== FALSE) {
  $name = $row[1];
  if(in_array($name,$suppliers)){
    if(!array_key_exists($name,$sum)) $sum[$name] = 0.0;
    $sum[$name] += $row[2];
  }
}
fclose($file);

//Output Result
var_export($sum); 
结果是:

array (
  'Marilyn' => 32140.58,
  'Nancy' => 45000.0,
  'John' => 1570.29,
) 
数组_sum()可用于所有供应商的合计:

$total = array_sum($groups);

CSV文件中的数据仅由一个分隔符分隔。显示的数据必须采用此格式,以便正确读取。我使用了一个单独的空间作为一月.csv

供应商存储在一个数组中

$filename = "january.csv";
$base = "suppliers.csv"; 

$suppliers = [];
$file = fopen($base, 'r');
while (($line = fgetcsv($file)) !== FALSE) {
  $suppliers[] = $line[0];
}
fclose($file);
然后可以在进一步的for循环中检查供应商和分组/求和

$file = fopen($filename, 'r');
$sum = [];
while (($row = fgetcsv($file,0," ")) !== FALSE) {
  $name = $row[1];
  if(in_array($name,$suppliers)){
    if(!array_key_exists($name,$sum)) $sum[$name] = 0.0;
    $sum[$name] += $row[2];
  }
}
fclose($file);

//Output Result
var_export($sum); 
结果是:

array (
  'Marilyn' => 32140.58,
  'Nancy' => 45000.0,
  'John' => 1570.29,
) 
数组_sum()可用于所有供应商的合计:

$total = array_sum($groups);

我的输出如下,数组中有很多小数位0(“S-玛丽莲工资”=>-31570.2900000000008731149137020111083984375,“S-南希·斯科萨纳”=>-30000.0,“S-约翰咨询费”=>-30000.0,“S-卡罗尔咨询费”=>-30000.0,“S-胡安工资”=>-24239.22000000000116415321834814453125,“S-雪莉工资”=>-14382.67000000000072759576141834259033203125,)我不需要it组我想要一个所有供应商的总数,例如Juanic+Shirley+Carol+Johan+Marilyn+Nancy=echo total您在这里发布的所有内容对我们来说都是不可复制的。小数位数太多是浮点数准确性的问题:我不明白的是,1月份的数字是一个固定的数字,有2个小数点,但它是l像sum函数这样的ook会创建一个奇怪的-31570.2900000000008731149137020111083984375我如何解决这个问题?你可以使用sprint()/printf()将结果格式化为两位小数作为输出。我的输出如下,其中有很多小数点0数组(“S-玛丽莲工资”=>-31570.2900000000008731149137020111083984375,“S-南希·斯科萨纳”=>-30000.0,“S-约翰咨询费”=>-30000.0,“S-卡罗尔咨询费”=>-30000.0,“S-胡安工资”=>-24239.22000000000116415321834814453125,“S-雪莉工资”=>-14382.67000000000072759576141834259033203125,)我不需要it组我想要一个所有供应商的总数,例如Juanic+Shirley+Carol+Johan+Marilyn+Nancy=echo total您在这里发布的所有内容对我们来说都是不可复制的。小数位数太多是浮点数准确性的问题:我不明白的是,1月份的数字是一个固定的数字,有2个小数点,但它是l像sum函数这样的ook会创建一个奇怪的-31570.2900000000008731149137020111083984375我如何解决这个问题?您可以使用sprintf()/printf()将结果格式化为输出的两位小数。