我使用以下内容将CSV转换为JSON(https://gist.github.com/robflaherty/1185299)。我需要修改它,以便它不是使用确切的文件URL路径,而是在目录中提取最新的文件URL,因为它的来源"在$ feed。
任何帮助都会很棒!我已尝试使用此处PHP: Get the Latest File Addition in a Directory中的代码,但似乎无法确定如何对其进行修改以使其正常工作。
<?php
header('Content-type: application/json');
// Set your CSV feed
$feed = 'http://myurl.com/test.csv';
// Arrays we'll use later
$keys = array();
$newArray = array();
// Function to convert CSV into associative array
function csvToArray($file, $delimiter) {
if (($handle = fopen($file, 'r')) !== FALSE) {
$i = 0;
while (($lineArray = fgetcsv($handle, 4000, $delimiter, '"')) !== FALSE) {
for ($j = 0; $j < count($lineArray); $j++) {
$arr[$i][$j] = $lineArray[$j];
}
$i++;
}
fclose($handle);
}
return $arr;
}
// Do it
$data = csvToArray($feed, ',');
// Set number of elements (minus 1 because we shift off the first row)
$count = count($data) - 1;
//Use first row for names
$labels = array_shift($data);
foreach ($labels as $label) {
$keys[] = $label;
}
// Add Ids, just in case we want them later
$keys[] = 'id';
for ($i = 0; $i < $count; $i++) {
$data[$i][] = $i;
}
// Bring it all together
for ($j = 0; $j < $count; $j++) {
$d = array_combine($keys, $data[$j]);
$newArray[$j] = $d;
}
// Print it out as JSON
echo json_encode($newArray);
?>
答案 0 :(得分:0)
这是一个难以回答的问题,因为没有足够的细节。 以下是一些需要回答的问题。
1)。您是否正在创建正在读取的csv文件?如果你是,你只需确保你想要阅读的文件被调用&#34; latest.csv&#34;当你去创建&#34; latest.csv&#34;你检查一下现有的&#34; latest.csv&#34;并首先重命名/存档。然后,您的目录包含存档,但最新存档的名称始终相同。
2)。如果您没有创建csv文件,那么您可能想询问csv文件的提供者是否有方法可以识别最新的文件,当然,如果他们提供了他们,他们期望为每个人提供最新的饲料,并有机会这样做。
3)。如果您不了解提供商并想要猜测,请查看文件的命名方式并尝试预测最新的文件。例如,如果它们看起来包含一个月和一年,则在预测的下一个最新文件上执行file_exists()(如果可以)。再一次,只是一种可能性。
答案 1 :(得分:0)
根据您的评论,如果文件驻留在同一服务器上或可在支持file
功能的文件系统上访问,则:
array_multisort(array_map('filemtime', $files=glob('/path/to/*.csv')), SORT_DESC, $files);
$newest = $files[0];
对于远程访问,您可以查看以下内容:How can I download the most recent file on FTP with PHP?