例如,输入数组为[9,1,9,1,3,9,1,2,9]输出数组将为[9,9,9,9,1, 1,1,2,3]。
这是我在下面尝试过的,但没有给我预期的结果:
$array = [9,1,9,1,3,9,1,2,9];
$values = array_count_values($array);
arsort($values);
$popular = array_keys($values);
print_r(array_values($popular));
foreach ($values as $key => $val) {
echo $key.", ";
}
输出:
Array
(
[0] => 9
[1] => 1
[2] => 3
[3] => 2
)
9, 1, 3, 2,
答案 0 :(得分:1)
如果我们循环array_count_values,那么我们可以确保它们以正确的顺序出现。
当有两个计数相同时,我发现array_intersect的计数相同,然后将它们foreach并按正确的顺序添加。
-----BEGIN OPENSSH PRIVATE KEY-----
答案 1 :(得分:0)
尝试将usort与array_count(php> = 7.0)结合使用:
val item = rVComments.findViewHolderForItemId(mAdapter.itemId)!!.itemView
val adapt = item.rVReplies.adapter as ChildCommentsAdapter
adapt.addComment(it.data.comment)
答案 2 :(得分:0)
您可以使用以下顺序:
$arrayCounts = array_count_values($array);
usort($array, function ($a, $b) use ($arrayCounts) {
return $arrayCounts[$b] - $arrayCounts[$a] ?: $a - $b;
});
现在$array
已按要求排序。
当两个元素usort
和$a
保持该顺序(从左到右)时,作为参数传递给$b
的回调函数应返回负数,或者当它们应该颠倒时为正数。没关系的时候为0。
在此特定的回调函数中返回的数字表达式减去$a
和$b
的频率。如果$b
发生更多,则该减法为正,然后返回。同样,如果减法为负,则返回该负值。现在,当频率相等时,?:
operator会加入,并对其后的表达式求值。基于原始值本身,其他减法也会导致正值或负值。因此,$a - $b
在$a < $b
时为负,这意味着顺序可以保持原样(知道我们已经得出它们的频率相等)。