在PHP中组合csv列值

时间:2016-10-17 06:00:40

标签: php csv

我有一个包含5行的csv文件:

-m  Job control is enabled.


等... 前3列仅用于视觉目的,不用于我需要实现的目标。 我需要做的是读取文件中的sku和qty数据并输出结果。 我必须计算相同skus的数量并获得每个sku的总数量。

基于上面的例子,我需要:

id | price|   name  | sku  | qty
1  |  22  | widget0 | abcd | 1
2  |  21  | widget1 | efgh | 1
3  |  10  | widget0 | abcd | 2
4  |  44  | widget1 | efgh | 1
5  |  22  | widget4 | mnop | 1

使用以下代码,我可以获得文件中相同skus的总数:

sku  | qty
abcd | 3
efgh | 2
ijkl | 1
mnop | 1

它给了我:

$file = ('my.csv');
$fh = fopen($file, 'rb');
$tag = array();
$qty = array();
$row=1;
while($col = fgetcsv($fh)) {
if($row == 1){ $row++; continue; } //skip 1st row
$num = count($fh);
if (isset($tag[$col[3]])) {
$tag[$col[3]]++;
}
else {
$tag[$col[3]] = 1;
}
}
print_r($tag);



哪个不正确。我不知道如何获取qty列值并将其与csv文件中skus值的总数相关联。
有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试此解决方案

$file = ('my.csv');
$fh = fopen($file, 'rb');
$tag = array();
$qty = array();
$row=1;

//skip first row
fgetcsv($fh, 10000, ",");

while($col = fgetcsv($fh,10000)) {

$num = count($fh);
if (isset($tag[$col[3]])) {
$tag[$col[3]]++;
}
else {
$tag[$col[3]] = 1;
}
}
print_r($tag);

答案 1 :(得分:0)

使用以下代码解决方案

$file = ('my.csv');
$fh = fopen($file, 'rb');
$tag = array();
$qty = array();
$row=1;
while($col = fgetcsv($fh)) {
if($row == 1){ $row++; continue; } //skip 1st row
$num = count($fh);
if (isset($tag[$col[3]])) {
//$tag[$col[3]]++;
$tag[$col[3]] = (int)$tag[$col[3]] + (int)$col[4]; // where $col[4] = qty with forcing to `int` value
}
else {
$tag[$col[3]] = $col[4];
}
}
print_r($tag);

你需要使用数量的和而不是增加+1

希望这会有所帮助!