PHP -读取结果文本文件以获取变量


PHP - Read a result txt file to get vars

我想做的事情看起来不可能与我实际的PHP技能。下面您可以找到一个比赛结果文件的示例,格式为txt。该文件由以下内容组成:

<>以前dir = the-track-file-namelongname = the-track-long-name-with-spacesFirstlap =由第一圈组成的门(检查点)的数量Normallap =其他圈所组成的门(检查点)的数量Holeshotindex =开始后的第一个门,它决定了哪个玩家先开始时间=比赛持续时间,单位为分钟圈数=圈数(如果分钟+圈数,时间到时计算圈数)开始时间= 1793Date =开始的时间戳玩家:(这条线下面是所有玩家,在这个例子中只有1个)插槽=0(这是玩家占用的多人服务器插槽)uid=5488(这是玩家的唯一ID)号码=755(选手的比赛号码)自行车=rm125(玩家的摩托车模型)name=Nico #755(玩家名)(这一行下面是每个门的时间戳,比如SLOT| gate |TIME)0 0 1917(就像除以时间戳/128听起来不错)012184(等等,参见下面的完整示例…)

游戏服务器是在一个专用的ubuntu。在每一场比赛结束时,我发送这些结果在FTP web服务器上,我需要的是让var输出一些可读的东西,如选择一个比赛后的结果表(即在下拉列表中)。做桌子不是问题。我的问题是,即使在这里搜索很多,我不知道如何读取txt来获得这种页面(只有RESULTS表):http://mxsimulator.com/servers/q2.MXSConcept.com/races/6015.html

下面是一个完整的示例结果文件:http://www.mediafire.com/view/3b34a4kd5nfsj4r/sample_result_file.txt

谢谢

好了,今晚是文件解析时间。

我编写了一个非常基本的解析器,它逐行遍历数据。首先它查找"="。当找到"="时,该行将在"="处拆分/展开。你得到了两个部分:"="之前和之后。我在$results数组中使用它们作为键和值。

这个过程一直持续到"times:"行。这一行指示从下一行("times:"+ 1行)开始结果。结果是被空间分隔的"槽栅时间"。所以这次的结果是用"(空格)展开的,你得到了三个部分。我已经插入了一个数组键'times',其中包含一个数组命名键(槽,门,时间)。

您可以查看$results数组的结构。它应该很容易迭代,以呈现一个表或输出数据。

#$datafile = 'http://www.mediafire.com/view/3b34a4kd5nfsj4r/sample_result_file.txt';
#$lines = file_get_contents($datafile);
$lines = '
dir=Dardon-Gueugnon
longname=Dardon Gueugnon
firstlap=72
normallap=71
holeshotindex=1
time=0
laps=6
starttime=1846
date=1407162774
players:
slot=0
uid=8240
number=172
bike=rm125
name=Maximilien Jannot | RH-Factory
slot=1
uid=7910
number=666
bike=rm125
name=Patrick Corvisier|Team RH-Factory
slot=2
uid=10380
number=114
bike=rm125
name=Benoit Krawiec | MXS-Concept.com
slot=6
uid=6037
number=59
bike=rm125
name=Yohan Levrage | SPEED
slot=8
uid=6932
number=447
bike=rm125
name=Morgan Marlet | Mxs-Concept.com
times:
6 0 1974
1 0 1989
0 0 2020
2 0 2056
6 1 2242
1 1 2260
0 1 2313
2 1 2338
6 2 2434
1 2 2452';
$results = array();
$parseResults = false;
#foreach($lines as $line){ // use this line when working with file_get_contents
foreach(preg_split("/(('r?'n)|('r'n?))/", $lines) as $line){     
    if($parseResults === true) {
        $parts = explode(' ', $line); // SLOT|GATE|TIME = parts 0|1|2
        $times = array(
            'slot' => $parts[0],
            'gate' => $parts[1],
            'time' => $parts[2]
        );
        $results['times'][] = $times;
    }
    if(false !== strpos($line, '=')) { // if line has a = in it, explode it
        $parts = explode('=', $line);    
        $results[$parts[0]] = $parts[1]; // assign parts to array as key=value
    }
    if(false !== strpos($line, 'times:')) {
        // we reached "times:", let's set a flag to start reading results in the next iteration
        $parseResults = true;
    }
}
var_dump($results);
输出:

array(15) { 
["dir"]=> string(15) "Dardon-Gueugnon" 
["longname"]=> string(15) "Dardon Gueugnon" 
....
["name"]=> string(31) "Morgan Marlet | Mxs-Concept.com" 
["times"]=> array(10) { 
    [0]=> array(3) { ["slot"]=> string(1) "6" ["gate"]=> string(1) "0" ["time"]=> string(4) "1974" } 
    [1]=> array(3) { ["slot"]=> string(1) "1" ["gate"]=> string(1) "0" ["time"]=> string(4) "1989" } 
    [2]=> array(3) { ["slot"]=> string(1) "0" ["gate"]=> string(1) "0" ["time"]=> string(4) "2020" } 
...
} } }