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

时间:2018-08-15 19:02:00

标签: php fgetcsv

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

我当前正在使用fgetcsv来读取csv文件($handle),并返回第一列与var相匹配的行。到目前为止,由于$data[0]是唯一值,因此效果很好。

但是,今后,$data[0]中可能会有重复的值,如果存在重复,我怎么只返回最后次出现?

2 个答案:

答案 0 :(得分:1)

如果存在多个,这将获得 first 出现,因为它会在发现第一个{em {1}}之后退出循环:

public static string TryGetServerFQDN(string ServerName)
{
    string ServerFQDN = ServerName;
    if (!string.IsNullOrEmpty(ServerName))
    {
        IPHostEntry serverIPEntry = null;
        try
        {
            serverIPEntry = Dns.GetHostEntry(ServerName);
        }
        catch
        {
        }

        if (serverIPEntry != null && !string.IsNullOrEmpty(serverIPEntry.HostName))
        {
            ServerFQDN = serverIPEntry.HostName;
        }
    }
    return ServerFQDN;
}

这将获得 last 项,因为它不会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

您实际上不需要分配给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之后或循环结束后包含正确的行。

答案 1 :(得分:0)

只需将行保存在某个地方:

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

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