基于多个值对数组进行排序

马丁·鲍尔(Martyn Ball)

我需要根据对象属性对对象数组进行排序。基本上,如果您查看固定装置表并记下“ Liverpool FC”和“ Manchester City FC”,您会发现它们具有相同数量的点,因此它们是根据其他值较高而排序的。

现在,如果你看看我的我唯一顺序基础上,点我,我不知道如何根据多个值订购此。

数据存储在一个类的实例内,该实例存储在内Array(,其Key名称为组名。

下面是管理数据的类,如何重新排列数组,使对象按第一个链接的顺序排列?

 class Calc {
    private $config;
    public $win = 0, $draw = 0, $loss = 0, $goalFor = 0, $goalConc = 0;

    public function __construct($payload = array(0,0)) {
      // Load config file
      $this->config = parse_ini_file('config.ini', true);

      // Add wins, losses, draws, goals for and goal conceived
      $this->addData($payload);
    }

    // Linked data updated, ammend values
    public function calcPlays() {
      return 0 + $this->win + $this->draw + $this->loss;
    }
    public function calcPoints() {
      // Add 0 to ensure value is an int
      return $this->win * ($this->config['winPoints']) + ($this->draw * $this->config['drawPoints']) + ($this->loss * $this->config['lossPoints']);
    }
    public function calcGoalDifference() {
      return ($this->goalFor - $this->goalConc);
    }

    public function addData($data) {
      // Append goal data
      $this->goalFor += $data[0];
      $this->goalConc += $data[1];

      // Win, Loss or Draw
      if ($data[0] > $data[1]) { $this->win++;} elseif
      ($data[0] < $data[1]) { $this->loss++;} elseif
      ($data[0] == $data[1]) { $this->draw++;}
    }
  }

编辑:

我的数据现在无处不在:

1   Burnley FC  13  4   2   7   12  21  -9  14
2   Leicester City FC   13  3   4   6   16  22  -6  13
3   Crystal Palace FC   13  3   2   8   21  26  -5  11
4   Swansea City FC 13  2   3   8   16  26  -10 9
5   Arsenal FC  13  8   4   1   28  13  15  28

我假设我的检查是错误的方法,我假设它将检查是否$a大于或等于$b,如果是,则返回true,如果不继续进行下一个检查?

编码:

// Sort teams by points
uasort($teamData, function($a, $b) {
  if ($a->calcPoints() < $b->calcPoints() && $a->calcPoints() !== $b->calcPoints()) {
    return true;
  } elseif ($a->calcGoalDifference() < $b->calcGoalDifference() && $a->calcGoalDifference() !== $b->calcGoalDifference()) {
    return true;
  } elseif($a->goalConc < $b->goalConc) {
    return true;
  }
  return false;
});
冬季福克

您可以使用usort并编写一个比较不同值并对其进行相应排序的函数。

类似于以下内容:

uasort($teamData, function ($a, $b)
{
    if ( $a->calcPoints() < $b->calcPoints() )
    {
        return 1;
    }
    elseif ( $a->calcPoints() <= $b->calcPoints() && $a->calcGoalDifference() < $b->calcGoalDifference() )
    {
        return 1;
    }
    elseif ( ($a->calcPoints() <= $b->calcPoints() && $a->calcGoalDifference() <= $b->calcGoalDifference()) && $a->goalConc < $b->goalConc )
    {
        return 1;
    }

    return 0;
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章