首先对出现次数最多的值进行排序

发布于 2024-11-02 22:27:06 字数 517 浏览 0 评论 0原文

假设我有一个像这样的数组:

$array = array('a', 'b', 'c', 'c', 'c', 'd', 'a', 'b', 'b', 'b', 'b');

我想要做的是返回一个按包含术语的频率重新排序的数组。所以,像这样:

['b', 'c', 'a', 'd']

因为b出现了5次,c出现了三次,a出现了两次,d出现了只有一次。这将如何完成?

期望的结果:

array (
  0 => 'b',
  1 => 'b',
  2 => 'b',
  3 => 'b',
  4 => 'b',
  5 => 'c',
  6 => 'c',
  7 => 'c',
  8 => 'a',
  9 => 'a',
  10 => 'd',
)

Let's say I have an array like this:

$array = array('a', 'b', 'c', 'c', 'c', 'd', 'a', 'b', 'b', 'b', 'b');

What I want to do is return an array reordered by the frequency of included terms. So, like this:

['b', 'c', 'a', 'd']

Because b appeared 5 times, c appeared thrice, a appeared twice, and d appeared only once. How would this be done?

Desired result:

array (
  0 => 'b',
  1 => 'b',
  2 => 'b',
  3 => 'b',
  4 => 'b',
  5 => 'c',
  6 => 'c',
  7 => 'c',
  8 => 'a',
  9 => 'a',
  10 => 'd',
)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

唔猫 2024-11-09 22:27:06
$counts = array_count_values($array);
arsort($counts);
$list = array_keys($counts);
var_dump($list);
$counts = array_count_values($array);
arsort($counts);
$list = array_keys($counts);
var_dump($list);
最美的太阳 2024-11-09 22:27:06

这应该有帮助

http://www.php.net/manual/ en/function.array-count-values.php

直接来自手册页

描述

数组 array_count_values ( 数组
$input ) array_count_values() 返回
使用输入值的数组
数组作为键及其频率
输入作为值。

然后根据值重新排序

This should help

http://www.php.net/manual/en/function.array-count-values.php

Straight from the man page

Description

array array_count_values ( array
$input ) array_count_values() returns
an array using the values of the input
array as keys and their frequency in
input as values.

Then just reorder based on the values

歌入人心 2024-11-09 22:27:06

前面的两个答案都没有对输入数组实现任何类型的排序。

  1. 计算唯一值。
  2. 按降序计数对唯一值进行排序。
  3. 使用排序后的计数作为查找数组对输入数组进行排序。

代码:(演示)

$counts = array_count_values($array);
arsort($counts);
usort($array, fn($a, $b) => $counts[$b] <=> $counts[$a]);
var_export($array);

请记住,如果您有两个具有相同出现频率的不同值,那么您可能会看到结果中混合了这些值。为了确保相似值分组在一起,请使用辅助排序规则。 (演示

$counts = array_count_values($array);
arsort($counts);
usort($array, fn($a, $b) => [$counts[$b], $a] <=> [$counts[$a], $b]);
var_export($array);

第二个代码段将按计数降序排序,然后按值升序排序。

Neither of the earlier answers are implementing any kind of sort upon the input array.

  1. Count the unique values.
  2. Sort the unique values by descending count.
  3. Sort the input array using the sorted counts as a lookup array.

Code: (Demo)

$counts = array_count_values($array);
arsort($counts);
usort($array, fn($a, $b) => $counts[$b] <=> $counts[$a]);
var_export($array);

Bear in mind that if you have two different values that have the same frequency of occurrence, then you might see the values mixed in the result. To ensure that like-values are grouped together, use a secondary sorting rule. (Demo)

$counts = array_count_values($array);
arsort($counts);
usort($array, fn($a, $b) => [$counts[$b], $a] <=> [$counts[$a], $b]);
var_export($array);

This second snippet will sort by counts descending, then by value ascending.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文