使用 fgetcsv 时获取匹配的 csv 列的最后一次出现

Get last occurrence of matched csv column when using fgetcsv

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($data[0] == "var") {
    }
}

我目前正在使用 fgetcsv 读取 csv 文件 ($handle) 和 return 第一列与 var 匹配的行。到目前为止,这很好用,因为 $data[0] 是唯一值。

但是往后,$data[0] 中可能有重复值,如果有重复,我怎么能只 return last 出现呢?

如果有多个,这将得到 first 出现,因为它会在找到第一个后 break 退出循环:

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($data[0] == "var") {
        $result = $data;
        break; // break out of the loop after the first is found
    }
}
print_r($result): // first one

这将得到 last 次出现,因为它不会 break 退出循环,最后一次出现将是分配给结果的最后一次:

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($data[0] == "var") {
        $result = $data;
        // loop keeps going until end of file
    }
}
print_r($result): // last one

您实际上不需要分配给 $result,因为 $data 将在 break 之后或循环结束后包含正确的行。

只需将行保存在某处:

$lastRow = null;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($data[0] == "var") {
        $lastRow = $data;
    }
}

每次出现需要的行都会覆盖 lastRow 变量,因此当循环结束时,您将看到最后一行符合您的条件。