php 对csv文件中的特定列求和

dly7yett  于 2023-01-04  发布在  PHP
关注(0)|答案(2)|浏览(155)

我正在从文件中阅读数据并显示数组,如下面的代码:

if (($fp = fopen("test.txt", "r")) !== FALSE) {     
    $count = 0;
    while(($row = fgetcsv($fp)) !== FALSE)
    {  
        $row = explode("|",$row[0]);
        foreach($row as &$el)
        {
            $el=trim($el);      
        }
        $count++;
        $tot = array_sum(array_column($row,2));
        echo "<pre>";print_r($row); 
        if($count>3)
        {
            break;  
        }
        echo "Coumt :".$tot;    
    }
    echo "Coumt :".$tot;
    fclose($fp);
}

测试.txt文件数据:

005-4410040      |BIRM| 0 
005-4410040      |CHI | 450
005-4410040      |CIN | 144

我想要数组的第二个索引的总和,它意味着单独变量中的320 + 450 + 144
我怎么才能做到这一点?我已经尝试了array_column(),但它不工作。

更新:我尝试过的:

$sum = array_sum(array_column($row,$row['2']));
fivyi3re

fivyi3re1#

您应该能够像这样使用array_column()array_sum()来实现这一点

$row = [
        ['005-4410040','BIRM',1],
        ['005-4410040','CHI',2],
        ['005-4410040','CIN',3]
    ];

$tot = array_sum(array_column($row, 2));

结果

6

向问题添加代码后:

您没有正确理解fgetcsv(),它一次只获取一行。因此,每次调用fgetcsv都会从您分解为$row的文件中返回一行
您所需要做的就是在处理文件的各行时累加$row[2]

if (($fp = fopen("test.txt", "r")) !== FALSE) {       
    $count = 0;
    $tot = 0;

    while(($row = fgetcsv($fp)) !== FALSE)
    {
        $row = explode("|",$row[0]);
        $count++;
        // I see one line with no value so to be safe
        $tot += $row[2] != '' ? $row[2] : 0;

        if($count>3) {
            break;  
        }
        echo "Coumt : $tot";  
    }

    echo "Coumt : $tot";
    fclose($fp);
}
nszi6y05

nszi6y052#

你叫错顺序了

$arr=array(array
(
     0  => "005-4410040",
     1  => "BIRM",
     2  => 320
),
array
(
     0  => "005-4410040",
     1  => "CHI",
     2  => 450
),
array
(
     0  => "005-4410040",
     1  => "CIN",
     2  => 144
));
echo (array_sum(array_column($arr, 2)));

相关问题