【问题标题】:How to display the last row of csv file in array using php? [duplicate]如何使用php显示数组中csv文件的最后一行? [复制]
【发布时间】:2019-03-25 08:50:46
【问题描述】:

我们有这个遥测设备,它通过将 csv 文件发送到我们的服务器来更新数据。 数据将在 csv 文件中每 15 分钟自动更新一次。 每天都会上传一个新的 csv 文件。 该文件每个月都会存储在一个文件夹中,这意味着设备将自动创建一个新文件夹。 (例如文件路径:..\database\AWLR\2018\10)

CSV 文件名是日期格式(例如:20181002.CSV)。 有时数据不会更新,因为我们将设备放置在偏远地区,所以如果可能的话,我想显示最新的数据。

我想在网站的表格中自动显示最新数据。 我尝试使用 php 在数组中打开 csv 文件,但代码只显示 csv 文件的第一行(最旧的数据),而我想显示最后一行(最新的数据)。

我尝试过的代码

$files_location = "database/";

function latest_file_Name ($files_location) {

$openDir = opendir($files_location);

while (false !== ($fileName = readdir($openDir))) {

if($fileName != "." && $fileName != "..")
{
$list[date("YmdHis ", filemtime($files_location.$fileName))]=$fileName;
}
}
rsort($list);
$last_file =array_shift($list);
return $last_file;
}

$last_file_in_folder = latest_file_Name($files_location);
pre_r($last_file_in_folder);//newest file name
$f_pointer=fopen("database/".$last_file_in_folder,"r"); // file pointer
$ar=fgetcsv($f_pointer);
pre_r($ar);//display data of newest file in array

有没有办法使用 php 或任何其他语言/方法显示最新数据? 任何帮助将不胜感激

这里是 csv 文件的链接csv

我已经解决了,谢谢大家

【问题讨论】:

  • 您只阅读第一行,所以当然这就是您所得到的。然后在循环中读取所有这些 - 然后访问最后一个的值。
  • 谢谢,我理解这个概念,我已经尝试使用 while 循环来读取所有数组,但我无法访问最后一行,因为数组键总是重置为 0。
  • 你在说什么数组键?像while($line = fgetscv()) { $data[] = $line; } 这样简单的东西应该可以让你得到一个数组中的所有数据,这样你就可以从中选择最后一个项目。 (当然,您可以选择比收集最终不需要的所有数据更复杂的方法,但也许首先尝试让它以这种方式运行。)
  • 好的,我是 Web 开发新手,如果我不明白逻辑,请见谅。我的意思是,如果我想选择多维数组的最后一项,我需要键(例如:第一个数组的 [0])。当我循环文件时,每一行的数组键总是重置为 [0],所以我不能选择最后一个数组。除了使用数组键之外,还有其他方法可以选择最后一项吗?请帮忙。而且我无法在网站上显示所有数据,因为我们有大约 25 台设备并且会继续增长。我想在一页中显示所有报告。
  • 不,它不是重复的,如果我选择文件名,我可以显示最后一行。这是另一种情况。

标签: php arrays database csv


【解决方案1】:

$files_location = "数据库/";

function latest_file_Name ($files_location) {

$openDir = opendir($files_location);

while (false !== ($fileName = readdir($openDir))) {

if($fileName != "." && $fileName != "..")
{
$list[date("YmdHis ", filemtime($files_location.$fileName))]=$fileName;
}
}
rsort($list);
$last_file =array_shift($list);
return $last_file;
}

$last_file_in_folder = latest_file_Name($files_location);
// print_r($last_file_in_folder);//newest file name
$f_pointer=fopen($files_location .$last_file_in_folder,"r"); // file pointer
while (!feof($f_pointer)) {
    $ar=fgetcsv($f_pointer);
print_r($ar);//display data of newest file in array
}

【讨论】:

  • 谢谢,这段代码读取了所有数组,但是有没有办法只显示最后一个数组?我无法显示它,因为每个数组的数组键都重置为 0。昨天我设法“循环 while 循环”以获取数组键的索引,但由于我刚刚从另一个开发人员那里复制代码,所以代码已经消失了。糟糕,我是 Web 开发新手。
  • 欢迎 @Waloy ,如果此代码适合您,则将其标记为已接受。因此,它将改善社区。 ——
  • 好的,谢谢您的回复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多