我正在创建一个游戏,当计时器结束时,用户可以输入他们的名字。我将名称和分数传递给使用AJAX的PHP文件。该PHP文件将其添加到XML文件中。我遍历它以创建一个包含分数的表,然后它返回到AJAX然后我用jQuery在屏幕上输出它。我现在所有的工作都很好。
我想要完成的是: 1.将分数添加到XML文件后,我想按降序按降序排序节点 2.然后我想按顺序用值填充表格。我也想把它限制在前10名。
基本上我遇到问题的方法就是订购。一旦订购了XML,填充表并将其限制为10应该非常简单。关于我应该怎么做的任何建议?
XML:http://people.rit.edu/lxl1500/Prog4/Project%202/scoreboard.xml
jQuery Ajax调用:
function addScore(score,name){
var url = 'scoreboard.php';
$.post(url,{Score:score, Name:name},function(data){
$('#score').html(data).show();
});
}
scoreboard.php:
<?php
$score = $_POST['Score'];
$name = $_POST['Name'];
if($name == ''){
$name = 'Player'.rand(0,5000);
}
$scoreboard = new domDocument;
$scoreboard->load('scoreboard.xml');
$root=$scoreboard->documentElement;
$entry = $scoreboard->createElement('entry');
$userScore = $scoreboard->createElement('score',$score);
$userName = $scoreboard->createElement('name',$name);
$entry->appendChild($userName);
$entry->appendChild($userScore);
$root->appendChild($entry);
$scoreboard->save('scoreboard.xml');
$scores = $scoreboard->getElementsByTagName('entry');
$string = '<table id="score-table" cellspacing="10"><tbody><tr><th align="left">User</th><th align="left">Score</th></tr>';
foreach($scores as $score){
$getScore = $score->getElementsByTagName('score')->item(0)->nodeValue;
$getPlayer = $score->getElementsByTagName('name')->item(0)->nodeValue;
$string.="<tr><td>$getPlayer</td><td>$getScore</td></tr>";
}
$string.='</tbody></table>';
echo $string;
?>
任何帮助将不胜感激!感谢。
答案 0 :(得分:0)
您可以构建一个已排序的XML文件,即按排序顺序将节点添加到xml文件中,例如
$entries = $root->getElementsByTagName('entry');
$added = false;
foreach ($entries as $item) {
if ($score <= $item->getElementsByTagName('score')->item(0)->nodeValue) continue;
$root->insertBefore($entry, $item);
$added = true;
break;
}
// if not yet added, add it
if (!$added) {
$root->appendChild($entry);
}
为此,必须对文件进行排序(或清空)。