我需要一個建議。解析文本文件
我需要剪切和解析文本文件(使用貨幣匯率)。下面我們就從這個文件中的小片段:
c057z110323
h057z110323
a057z110323
b012z110323
c058z110324
h058z110324
a058z110324
c059z110325
h059z110325
a059z110325
c060z110328
h060z110328
a060z110328
c061z110329
h061z110329
a061z110329
c062z110330
h062z110330
a062z110330
b013z110330
c063z110331
h063z110331
a063z110331
c064z110401
h064z110401
a064z110401
c065z110404
h065z110404
a065z110404
c066z110405
h066z110405
a066z110405
c067z110406
h067z110406
a067z110406
b014z110406
c068z110407
h068z110407
a068z110407
c069z110408
h069z110408
a069z110408
正如你可以看到有很多線路(在原文件大約有行80000(被添加每天幾行)
字符串格式如下:
A000112233
where
A - type
000 - number of the file (created this year)
11 - year
22 - month
33 - day
我用下面的代碼片段獲得25個最新行從文件:
$file = "http://www.nbp.pl/kursy/xml/dir.txt";
$data = file($file);
$count = count($data);
for($i = $count - 25; $i < $count; $i++)
{
if(substr($data[$i], 0, 1) === 'a')
{
$latest[] = $data[$i];
}
}
我只需要得到以「a」開頭的行。輸出數組看起來如下:
array(8) {
[0]=>
string(13) "a062z110330
"
[1]=>
string(13) "a063z110331
"
[2]=>
string(13) "a064z110401
"
[3]=>
string(13) "a065z110404
"
[4]=>
string(13) "a066z110405
"
[5]=>
string(13) "a067z110406
"
[6]=>
string(13) "a068z110407
"
[7]=>
string(13) "a069z110408
"
}
現在我需要每個數組元素比較當前日期前得到最新的工作日的最新項目。我正在使用這種方式:
$i = 1;
foreach($latest as $row)
{
$plural = ($i > 1) ? 's' : null;
if(substr(trim($row), -6) === date("ymd", strtotime("-" . $i . " day" . $plural))
{
$filename = $row;
break;
}
$i++;
}
它的工作相當好,但我面臨一個大問題。我無法對$latest
數組按最近的六個字符排序。我嘗試使用sort(),rsort()來做到這一點。他們沒有一個對我有好處。
任何人都可以幫助我解決這個問題,或者有更好的方法來做我正在尋找的東西。