如何验证列表或数组中元素的顺序

时间:2011-04-28 13:32:15

标签: php sorting

ETA:我认为我的问题需要澄清一些。我不想对我的数组进行排序。我想确保按特定标准按顺序排列的给定数组也按照另一个标准排序。我做了一个图解来说明。每行是按编号排序的数组。如果字母也按顺序排列,则数组通过测试。

enter image description here


原始问题

我有一个包含2个属性的父类PhysicalCount:datecount。我还有PhysicalCount的子类:ClutchCountFryCountMatCount。当我有一个PhysicalCounts和子类的混合数组时,我需要验证(不设置!)订单符合这些条件:

  1. 对象按date
  2. 排序
  3. 每个子类的0到1个对象可能存在
  4. 0到PhysicalCount的许多对象可能存在
  5. 如果ClutchCount存在,则必须具有比FryCountMatCount更早的日期(如果存在)
  6. 如果存在FryCount,则必须具有比MatCount更早的日期(如果存在)
  7. 归结起来,问题是:

    给定一个按一个标准排序的列表(在我的情况下为$o->date),确定按另一个标准(在我的情况下为get_class($o))对相同列表进行排序的最有效方法是什么?同一个订单?

    我更喜欢PHP的解决方案,但我认为这是一个相当普遍的问题,有一个标准的解决方案,我只是不知道它的名字。 (这是我后悔我的学位选择[不是CS])。

1 个答案:

答案 0 :(得分:1)

根据我们在评论中的讨论,你需要的是一种有点“稳定”的排序(实际上不是按定义实际上是稳定排序)使用usort来对用户中数组中的对象进行排序 - 定义的方式。您可以在$cmp_function中指定问题中提到的条件,以便排序的数组符合您的需求。