订购XML记分板并使用PHP返回

时间:2013-02-14 22:12:49

标签: php javascript jquery xml ajax

我正在创建一个游戏,当计时器结束时,用户可以输入他们的名字。我将名称和分数传递给使用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;

?>

任何帮助将不胜感激!感谢。

1 个答案:

答案 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);
}

为此,必须对文件进行排序(或清空)。