1

我正在创建一个游戏,当计时器结束时,用户可以输入他们的名字。我使用 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();
   });
}

记分牌.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;

?>

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

4

1 回答 1

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

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

于 2013-02-14T22:31:59.737 回答