按对象变量排序对象数组,替换键

时间:2016-11-27 18:33:42

标签: php arrays sorting

我有一个对象实例数组,我需要根据对象中的函数返回来对它们进行排序。

所以基本上我的对象有2个变量,函数会将它们加在一起,然后返回结果,对象列表需要根据它进行排序。

我的分类代码:

function cmp($a, $b)
{
  if ($a->calcPoints() == $b->calcPoints()) {
     return 0;
  }
  return ($a->calcPoints() > $b->calcPoints()) ? -1 : 1;
}
usort($teamData, "cmp");

在不使用usort函数的情况下,我在转储数组时会得到以下内容:

  

关键:“赫尔城FC”价值:   {“胜利”:3,“平局”:2,“失败”:8,“goalFor”:11,“goalConc”:28}关键:“莱斯特   City FC“Value:{”win“:3,”draw“:4,”loss“:6,”goalFor“:16,”goalConc“:22}

一旦我使用了usort功能,我的键就会被替换为:

  

键:0值:{“win”:10,“draw”:1,“loss”:2,“goalFor”:29,“goalConc”:10}   关键:1值:{“win”:9,“draw”:3,“loss”:1,“goalFor”:29,“goalConc”:12}

我怎么能阻止这个?

2 个答案:

答案 0 :(得分:2)

如果您在手册中查找usort(),则会发现:

  

注意:此函数为数组中的元素指定新键。它将删除可能已分配的任何现有密钥,而不是   只需重新排序密钥。

然而,

uasort()将:"使用用户定义的比较函数对数组进行排序并维护索引关联"。继续尝试,它应该是你正在寻找的。

答案 1 :(得分:1)

您应该使用uasort功能而不是usort。根据{{​​3}}:

  

uasort - 使用用户定义的比较函数对数组进行排序   维持指数关联