0

我有这样的原始数组:

$arr=数组(10,8,13,8,5,10,10,12);

并想排序,所以最终变成:

$arr=数组(10,10,10,8,8,13,12,5);

为了获得最终结果,我使用这种方式:

$arr=array(10,8,13,8,5,10,10,12);

// Remove array that contain array(1)
$arr_diff=array_diff(array_count_values($arr), array(1));

// Remove array that contain keys of $arr_diff
$arr=array_diff($arr, array_keys($arr_diff));

// Sort
rsort($arr);
ksort($arr_diff);

// unshift
foreach ($arr_diff as $k=>$v)
{
    while ($v > 0)
    {
        array_unshift($arr,$k);
        $v--;
    }
}
// print_r($arr);

我的问题是还有另一种更简单的方法吗?

谢谢。

4

1 回答 1

3
$occurrences = array_count_values($arr);
usort($arr, function ($a, $b) use ($occurrences) {
    // if the occurrence is equal (== 0), return value difference instead
    return ($occurrences[$b] - $occurrences[$a]) ?: ($b - $a);
});

请参阅参考:在 PHP 中对数组和数据进行排序的所有基本方法

于 2013-07-24T06:34:17.453 回答