ETA:我认为我的问题需要澄清一些。我不想对我的数组进行排序。我想确保按特定标准按顺序排列的给定数组也按照另一个标准排序。我做了一个图解来说明。每行是按编号排序的数组。如果字母也按顺序排列,则数组通过测试。
我有一个包含2个属性的父类PhysicalCount:date
,count
。我还有PhysicalCount的子类:ClutchCount
,FryCount
和MatCount
。当我有一个PhysicalCounts和子类的混合数组时,我需要验证(不设置!)订单符合这些条件:
date
PhysicalCount
的许多对象可能存在ClutchCount
存在,则必须具有比FryCount
或MatCount
更早的日期(如果存在)FryCount
,则必须具有比MatCount
更早的日期(如果存在)归结起来,问题是:
给定一个按一个标准排序的列表(在我的情况下为$o->date
),确定按另一个标准(在我的情况下为get_class($o)
)对相同列表进行排序的最有效方法是什么?同一个订单?
我更喜欢PHP的解决方案,但我认为这是一个相当普遍的问题,有一个标准的解决方案,我只是不知道它的名字。 (这是我后悔我的学位选择[不是CS])。
答案 0 :(得分:1)
根据我们在评论中的讨论,你需要的是一种有点“稳定”的排序(实际上不是按定义实际上是稳定排序)使用usort来对用户中数组中的对象进行排序 - 定义的方式。您可以在$cmp_function
中指定问题中提到的条件,以便排序的数组符合您的需求。