Сравните столбец из 2 CSV, если совпадает сумма эха - PullRequest
1 голос
/ 25 марта 2020

Нужна помощь У меня есть 2 файла CSV

january.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

Теперь я хочу сложить все значения в количестве (january.csv), которые совпадают с 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);

1 Ответ

0 голосов
/ 25 марта 2020

Данные в файлах CSV разделены ровно одним разделителем. Отображаемые данные должны быть в этом формате, чтобы их можно было правильно прочитать. Я использовал один пробел для january.csv.

Поставщики хранятся в массиве.

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

$suppliers = [];
$file = fopen($base, 'r');
while (($line = fgetcsv($file)) !== FALSE) {
  $suppliers[] = $line[0];
}
fclose($file);

Затем можно выполнить проверку поставщиков и группировку / суммирование для дальнейшего oop.

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

array_sum () может использоваться для всех поставщиков:

$total = array_sum($groups);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...