对包含数百个不同名称和值的数组进行排序



我正在编写一个程序,它可以跟踪数百个用户,获取他们的体验(存储它),然后在指定的跟踪时间结束后根据需要再次获取它。我要做的是对获得的经验进行排序,同时保持与名称的关联,然后从高到低输出获得的经验。

下面是我正在做的一个例子:

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'是唯一一个比其他人获得更多经验的'人'),然后'b-e'将按照字母顺序跟随它。它目前在收集任何数据之前按字母顺序排序,所以我假设我要做的就是对获得的经验进行排序。

我怎样才能做到这一点?

最简单的方法可能是将值放入多维数组中,然后使用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 %in", $each_score[0], $each_score[1]);
  }
}

相关内容

  • 没有找到相关文章

最新更新