【问题标题】:Array unique sorted by density按密度排序的唯一数组
【发布时间】:2014-07-25 17:32:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php arrays sorting logic


    【解决方案1】:

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

    $counts = array_count_values($array);
    

    然后对结果进行降序排序,注意保留键:

    arsort($counts);
    

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

    $result = array_keys($counts);
    

    See it in action.

    请注意,此方法非常方便,但仅限于可用作数组键的值(即字符串和整数)。如果输入包含其他类型的数据(浮点数、对象、数组),您将需要手动执行此操作。

    【讨论】:

    • 这是一个很好的答案!正是我想要的,虽然我忘了提到我正在排序的数组是一个数组数组这种方法仍然可行吗?内部的“数组”是需要计数的东西
    • @CalvinMoss:我只是在编辑以解决这个问题。不,不可能这样做。而且无论您做什么,您都必须定义确定内部数组是否相等的标准是什么;从那里开始。是== 平等吗? === 平等?也许它是递归的?还是完全不同的东西?
    • 是否可以这样做,但可能是在数组中的特定值上?例如 Array()->[0]->title["hello!"] [1]->title["hello!"] ?感谢您提供了很多帮助
    • @CalvinMoss:现在你有一个对象数组?!?!建议首先发布正确的数组。
    • @CalvinMoss:最后一条评论在语法上没有多大意义,而且无论如何很难击中移动目标。如果实际问题与我想要回答的不同,请花时间正确定义它(通过编辑此问题或提出新问题)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多