PHP:如果 ID 多次出现且某列具有特定值,则从 CSV 中删除一行

PHP: Remove a row from a CSV if ID occurs multiple times and a column has a specific value

我在 CSV 文件中有如下数据。绿线是我想保留的。

基本上如果有人有单行,我想保留它。

如果它们有多行,我想删除第 3 列为 A - Fully Fit 的任何内容。

在 运行 完成整个文件后,我想将其保存在原来的文件上。

我尝试编写代码,但不确定今天是否是星期五,但我现在无法理解逻辑。

可能只有一行,也可能有几十行。因此,如果一个 ID 有 1000 行,我只想删除该 ID 第 4 列为 "A - Fully Fit"

的行

更新

此代码有效,但不确定它是否是最佳的

// DECLARE ARRAYS
$a = Array();
$b = Array();
$c = Array();

// LOOP THROUGH FILE AND COLLECT DUPLICATES
if (($handle = fopen($filename, "r")) !== FALSE) {      

    while (($line = fgetcsv($handle, 4096, ",")) !== FALSE) {
        $a[$line[1]][] = 'SHAKKA';
    }

    foreach ($a as $k=>$v) {
        if (count($v)>1) {
            $b[] = $k;
        }
    }
}

// IF A DUPLICATE THEN REMOVE ROWS THAT ARE 'A - Fully Fit'
if (($handle = fopen($filename, "r")) !== FALSE) {      
    while (($golly = fgetcsv($handle, 4096, ",")) !== FALSE) {
        if (in_array($golly[1],$b) && $golly[3] == 'A - Fully Fit')  {
        }
        else {
            $c[] = $golly;
        }
    }
}
fclose($handle);

// WRITE THE FILE
$fp = fopen($filename, 'wa+');
foreach ($c as $fields) {
    fputcsv($fp, $fields);
}
fclose($fp);
<?php


if (($handle = fopen($filename, "r")) !== FALSE) {      
    $new_rows = [];
    $hash_ids = [];

    while (($line = fgetcsv($handle, 4096, ",")) !== FALSE) {
        if($line[3] === 'A - Fully Fit'){
            if(isset($hash_ids[$line[1]])) continue;
            $hash_ids[$line[1]] = true;
        }
        $new_rows[] = $line;
    }

    fclose($handle);

    // WRITE TO THE FILE
    $fp = fopen($filename, 'wa+');
    foreach ($new_rows as $current_row) {
        fputcsv($fp,$current_row);
    }
    fclose($fp);
}

在上面的代码中,我们为每个ID维护了一个散列(关联数组)。如果我们已经遇到带有 A - Fully Fit 的 ID,那么我们将跳过该行,否则我们将其添加到列表中。