php - 通过使用元素分组并通过另一个过滤来复制 CSV 文件

标签 php csv multidimensional-array duplicates php-7

<分区>

请花几天时间尝试解决代码以复制 csv 文件

想法是浏览 csv 文件,删除重复项并让具有最大 id 的行

例如这个文件CSV FILE TO duduplicate

结果将是rewriting of result into csv

while (($this->lineInWork = fgetcsv($handle, 0, $delimiter)) !== false) {
        if ($index == 0) {
            if (!$this->checkHeaderFile()) {
                fclose($handle);
                return false;
            }
        } else {
            $idProject    = $this->columns[self::ID_PROJET]['index'];
            $TitleProject = $this->columns[self::Title_Project]['index'];
            $currentTitle = null;
            if ($this->lineInWork[$TitleProject] != $currentTitle)
            {
                $currentTitle = $this->lineInWork[$TitleProject];
                array_push($this->temporary_file[$currentTitle], $this->lineInWork);
            }
        }
        $index++;
    }
    fclose($handle);

问题不在于重写文件,而在于用正确的行构建一个数组

最佳答案

我可能会为此做两种不同的排序(假设我已经理解您的要求)。我创建了一个快速的 csv 编写器,您可能已经拥有它:

protected function saveToCsv($data, $path)
{
    $fp = fopen($path, 'w');

    foreach ($data as $fields) {
        fputcsv($fp, $fields);
    }

    fclose($fp);
}

筛选和排序脚本:

# Create a storage array
$new    =   [];
# Increment array to determine header row
$i      =   0;
# Turn the csv file to array
$array  =   array_map('str_getcsv', file('original.csv'));
# Sort low to high by the ID_project
usort($array, function($a, $b){
    return ($a[0] < $b[0]);
});
# Loop the array and just re-assign over the top of each instance of value
# which will eventually assign the last value (highest)
foreach($array as $row) {
    if($i == 0) {
        # Save header to put back into the copy csv
        $header =   $row;
        $i++;
        continue;
    }
    # Assign by id so the values are unique and sortable after
    if(!isset($new[$row[2]]))
        $new[$row[2]]   =   $row;
}
# Resort by the app_id
ksort($new);
# Save the new CSV somewhere with the header merged
$this->saveToCsv(array_merge([$header], $new), 'copy.csv');

关于php - 通过使用元素分组并通过另一个过滤来复制 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58634048/

相关文章:

python - 更改 csv.DictReader 类型中字典键的值

javascript - 使用 Javascript 的二叉树级顺序遍历

python - 绘制包含 80% (x, y) 点的圆

带有 git 和 phpfog 的 Php 多数据库环境

php - Codeigniter,钩子(Hook)未正确加载输入类

PHP time() 改变小时和秒而不是分钟?

PHP : multidimensional array merge recursive

php - 用户指定在 jqplot 中绘制的 y 轴数量

python - 值错误 : Unconverted data remains . 000

java - GetMapping 使用 Spring Boot 生成 CSV 文件