gpt4 book ai didi

php - 如果日期已过,则从 CSV 中删除行

转载 作者:搜寻专家 更新时间:2023-10-31 21:05:33 25 4
gpt4 key购买 nike

我正在打开一个包含两列的 CSV,其中一列是状态,另一列是 m/d/y 格式的交货日期。我想删除日期早于最近相应日期的重复状态条目。

例如,如果 CSV 包含:

CA,1/5/16
CA,4/8/15
CA,3/2/15
OR,3/4/15
OK,3/4/14

...我只想存储:

CA,1/5/16
OR,3/4/15
OK,3/4/14

然后,我想将这个新数组中的交货日期与当前日期进行比较,并只显示具有过去日期的州(仅 OR 和 OK)。为了提供上下文,向一个州的交付分为不同的部分,我只想列出具有完全交付 cargo 的州。

我一直停留在比较和删除日期部分,但我认为我已经掌握了其余部分。到目前为止,我有:

<?php

if (($handle = fopen("test.csv", "r")) !== FALSE) {
$row=0;
$csv_delivered = array();

while (($line_of_text = fgetcsv($handle, 1000, ",")) !== FALSE) {
$date=$line_of_text[1];

if(\DateTime::createFromFormat('m/d/y',$date) < new \DateTime()){
//date is in the past
$csv_delivered[] = $line_of_text;
}
}
fclose($handle);

foreach ($csv_delivered as $delivered) {
$states_delivered.= $delivered[0].","; //state
}
}

?>

<p>Delivered: <?php echo $states_delivered; ?></p>

最佳答案

如果我没猜错的话,

<?php

if (($handle = fopen("test.csv", "r")) !== FALSE) {
$row=0;
$csv_delivered = array();
$state_date = array(); // holds date of last occurence
$now = new \DateTime();

while (($line_of_text = fgetcsv($handle, 1000, ",")) !== FALSE) {
// ignore data that are in the future
if ($state_date_min[$state]>$now) continue;

// prepare
$date=$line_of_text[1];
$state=$line_of_text[0];
$date = \DateTime::createFromFormat('m/d/y',$date);

// store if not existing or overwrite if this one is newer
if (!isset($state_date[$state]) || $date>$state_date[$state]) {
$csv_delivered[$state] = $line_of_text;
$state_date[$state] = $date;
}

}
fclose($handle);

foreach ($csv_delivered as $state => $delivered) {
$states_delivered.= $delivered[0].","; //state
}
}

?>

<p>Delivered: <?php echo $states_delivered; ?></p>

记住每个状态的日期,如果不存在则存储,如果较新则覆盖。请忽略所有 future 的数据。

关于php - 如果日期已过,则从 CSV 中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32974683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com