如何按旧数组中每个重复值的计数降序创建新数组



我想从旧数组中排列一个新数组,其中有多个值,其中也有重复值(在旧数组中(。

所需的编码应如下所示

like so

$old_array = array("1", "2" ,"3", "1", "5", "2", "2", "3", "3", "3", "6");
$new_array = array("3","2","1","5","6"); 

新数组按值 .eg 频率的降序排列。"3"的计数为 4,"2"的计数为 3,"1"的计数为 2,依此类推

$old_array = array("1", "2" ,"3", "1", "5", "2", "2", "3", "3", "3", "6");          
$values = array_count_values( $old_array );             
arsort($values);            
$result = array_keys($values);

输出(对于 php 5.6.35(:

$result = 
array(
(int) 0 => (int) 3,
(int) 1 => (int) 2,
(int) 2 => (int) 1,
(int) 3 => (int) 6,
(int) 4 => (int) 5
)

一种选择是使用 array_count_values,然后使用 uksort 根据原始数组中的值对键进行排序。

排序后,取array_keys。

$old_array = array("1", "2" ,"3", "1", "5", "2", "2", "3", "3", "3", "6");
$result = array_count_values($old_array);
uksort($result, function($a, $b) use ($result){
return $result[$a] < $result[$b];
});
$new_array = array_keys($result);
print_r($new_array);

输出

Array
(
[0] => 3
[1] => 2
[2] => 1
[3] => 5
[4] => 6
)

Php 演示

最新更新