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,那么我们将跳过该行,否则我们将其添加到列表中。
我在 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,那么我们将跳过该行,否则我们将其添加到列表中。