while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($data[0] == "var") {
}
}
我当前正在使用fgetcsv
来读取csv文件($handle
),并返回第一列与var
相匹配的行。到目前为止,由于$data[0]
是唯一值,因此效果很好。
但是,今后,$data[0]
中可能会有重复的值,如果存在重复,我怎么只返回最后次出现?
答案 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
变量,因此,在循环结束时,您将在最后一行找到符合条件的行。