【问题标题】:How to count specific column data in CSV file using PHP [duplicate]如何使用 PHP 计算 CSV 文件中的特定列数据
【发布时间】:2022-01-14 13:04:25
【问题描述】:

我有一个 CSV 文件。它包含 3 列我只想计算第 3 列的总行数。我尝试了一个代码,但它显示了整个 CSV 文件的行数。

$record = file('filename.csv', FILE_IGNORE_NEW_LINES |  FILE_SKIP_EMPTY_LINES);
$total_record = count($record);
echo  $total_record; // output 6

根据下图,我只想计算 Ph_no 列。请帮帮我

【问题讨论】:

标签: php codeigniter


【解决方案1】:

您可以使用array_map()file() 返回的数组中的每个元素(行)运行回调str_getcsv()

$arr = array_map('str_getcsv', file('./filename.csv'));

结果 ($arr) 如下所示:

Array
(
    [0] => Array
        (
            [0] => First_Name
            [1] => Last_name
            [2] => Ph_no
        )

    [1] => Array
        (
            [0] => ABC
            [1] => AB
            [2] => 1234567890
        )

    ... etc.

然后您可以计算电话号码的数量:

$phNo = array_column($arr, 2);
$phNoCount = count($phNo) -1 ; // subtract the header
echo 'Ph_no count: ' . $phNoCount;

【讨论】:

  • 我试过你的代码,实际上工作正常,但它也在计算空白行。我需要在计算电话号码列时跳过空行
  • 更改:$phNo = array_column($arr, 2);$phNo = array_filter(array_column($arr, 2)); // remove empty cells
  • 非常感谢它现在工作正常
【解决方案2】:
$file = fopen('myCSVFile.csv', 'r');
$count = 0;
while (($line = fgetcsv($file)) !== FALSE) {
    $num = count($line);
    for ($i=0; $i < $num; $i++) {
        if(!empty($line[2]) {
            $count++;
        }
    }
}
fclose($file);
echo $count;

【讨论】:

  • 你的代码不适合我,请帮我一次
【解决方案3】:

使用fgetcsv() 函数非常简单

$tot = 0;
if (($f = fopen("filename.csv", "r")) !== FALSE) {
    // read and ignore first line, titles
    fgetcsv($f, 1000, ",");
    while (($line = fgetcsv($f, 1000, ",")) !== FALSE) {
        if ( $line[2] !== '' ) {
            $tot += $line[2];   // accumulate column 3
        }
    }
}
fclose($f);
echo $tot;

【讨论】:

  • 我尝试使用您的代码,但输出为 0
猜你喜欢
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多