数组唯一按密度排序


Array unique sorted by density

我有一个数组有时有重复的条目,比如我有一个数组

array("dog", "cat", "cat", "mouse", "cat", "dog")

现在如果我使用这里找到的方法我可以使数组成为一个唯一的数组,像这样

array("dog", "cat", "mouse")

然而,我要做的是首先根据值密度对这个列表进行排序,例如,在原始数组中有3只猫,2只狗和1只老鼠,但是唯一的这个顺序是不正确的狗->猫->老鼠而不是猫->狗->老鼠。如何按密度对数组排序并使其唯一?

首先计算每个项目的基数(密度):

$counts = array_count_values($array);

然后按降序排序结果,注意保留键:

arsort($counts);

最后你得到(唯一的)键按降序排序:

$result = array_keys($counts);

实际操作

注意这个方法非常方便,但是你只能使用可以作为数组键的值(即字符串和整数)。如果输入包含其他类型的数据(浮点数、对象、数组),则需要手动执行此操作。