我正在制作一个跟踪数百名用户的程序,抓住他们的经验(存储它),然后在指定的跟踪时间结束后再次按需抓取它。我要做的是对获得的经验进行排序,同时保持与名称相关联,然后输出从最高到最低的经验。
以下是我正在做的一个例子:
display();
function display() {
$participants = array("a", "b", "c", "d", "e");
sort($participants);
for ($i = 0; $i < count($participants); $i++) {
$starting = getStarting($participants[$i]);
$ending = getEnding($participants[$i]);
$gained = $ending - $starting;
}
}
function getStarting($name) {
$a = "a";
return $name == $a ? 304 : 4;
}
function getEnding($name) {
$a = "a";
return $name == $a ? 23 : 34;
}
所以,我试图这样做,以便如果我要打印变量,那么'a'将是第一个(因为,正如你所看到的,我做到了'a'是唯一的'人'这比其他人获得了更多的经验,然后'be'会按照字母顺序跟随它。它目前在收集任何数据之前按字母顺序对其进行排序,因此我假设我所要做的就是对获得的经验进行排序。
我怎么能实现这个目标?
答案 0 :(得分:0)
最简单的方法可能是将值放入多维数组中,然后使用usort():
function score_sort($a,$b) {
// This function compares $a and $b
// $a[0] is participant name
// $a[1] is participant score
if($a[1] == $b[1]) {
return strcmp($a[0],$b[0]); // Sort by name if scores are equal
} else {
return $a[1] < $b[1] ? -1 : 1; // Sort by score
}
}
function display() {
$participants = array("a", "b", "c", "d", "e");
// Create an empty array to store results
$participant_scores = array();
for ($i = 0; $i < count($participants); $i++) {
$starting = getStarting($participants[$i]);
$ending = getEnding($participants[$i]);
$gained = $ending - $starting;
// Push the participant and score to the array
$participant_scores[] = array($participants[$i], $gained);
}
// Sort the array
usort($participant_scores, 'score_sort');
// Display the results
foreach($participant_scores as $each_score) {
sprintf("Participant %s has score %i\n", $each_score[0], $each_score[1]);
}
}