我在游戏中通过 FTP实现了在线评分系统。在这里,看一下更新的文本文件:
User0:1000
User1:1500
User2:250
User3:700
然后,我要做的是创建一个包含3列的表: 排名|名称|评分
我已经能够提取每一行的名称和分数:
<table><td>Rank</td><td>Name</td><td>Score</td>
<?php $lines = file("./scores/pk.txt");
for($i=0;$i<count($lines);$i++) {
echo "<tr><td></td>";
echo "<td>".substr($lines[$i],0,strpos($lines[$i],":"))."</td>";
echo "<td>".substr($lines[$i],strpos($lines[$i],":")+1)."</td>";
echo "</tr>";
} ?> </table<
但是你知道,如果我执行此操作,我会将第一列清空(因为“&lt; td&gt;&lt; / td&gt;”)。
所以我的问题是(最后):
如何按第三列和在第一列中分配正确的排名对此数组进行排序?
在我的例子中,它看起来像:
排名|名称|得分
1 | User1 | 1500
2 | User0 | 1000
3 | User3 | 700
4 | User2 | 250
答案 0 :(得分:1)
这应该适合你:
只需用array_map()
和explode()
冒号循环浏览文件的每一行。
然后您只需使用usort()
对其进行排序即可。然后您可以在表格中显示数据。
<?php
$lines = file("./scores/pk.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$lines = array_map(function($v){
return explode(":", $v);
}, $lines);
usort($lines, function($a, $b){
return $b[1] - $a[1];
});
echo "<table border='1'><tr><td>Rank</td><td>Name</td><td>Score</td></tr>";
foreach($lines as $rank => $line)
echo "<tr><td>" . ($rank+1) . "</td><td>" . $line[0] . "</td><td>" . $line[1] . "</td></tr>";
echo "</table>";
?>
输出:
Rank Name Score
1 User1 1500
2 User0 1000
3 User3 700
4 User2 250