获取数组中重复次数最多的元素,如果重复次数最多,请按字母顺序顺序获取结果

问题描述

假设我有一个水果数组,我想知道哪个或哪一个是最重复的,例如:

$array = array('apple','banana','apple','orange','grape','mango');
    
//Here I get an associative array with each fruit name as key and number of times repeated as value:    
$values = array_count_values($array);

//Here I order the array descendently in order to get the most repeated values first: 
arsort($values);

如您所见,苹果和橙子重复了相同的次数,如何以动态方式获得这些值,而我总是得到n重复次数最多的水果名称?

获得此信息后,我需要按字母顺序对那些最重复的值进行排序,当我在数组中具有那些最重复的值时,我认为可以使用ksort();函数,例如,如果我有: / p>

[orange] => 2
[apple] => 2
[grape] => 2

结果应为:

[apple] => 2
[grape] => 2
[orange] => 2

解决方法

基于this answer,这可以做到:

$array = array('orange','apple','banana','orange','grape','mango','apple');

$values = array_count_values($array);

$max = max($values);

$fruits = array_filter($values,function($num) use ($max){ return $max == $num; });

$ksort($fruits);

输出:

[
apple => 3,orange => 3
]
,

Online PHP evaluator

使用array_count_values()并计算数组的所有值,然后通过foreach()映射新数组,运行asort()并维护索引关联,然后运行arsort()来反转订购...


$array = array('apple','mango');

$fruits = array_count_values($array);
foreach ($fruits as $key => $val) {         
    $arr[$key] = $val;
}
asort($arr);
arsort($arr);
var_dump($arr);

输出用于:$array = array('apple','mango');

array(5) {
  ["apple"] => int(2)
  ["orange"] => int(2)
  ["banana"] => int(1)
  ["grape"] => int(1)
  ["mango"] => int(1)
}

输出用于:$array = array('watermelon','plum','watermelon','watermelon');

array(7) {
  ["plum"]=>
  int(3)
  ["watermelon"]=>
  int(3)
  ["apple"]=>
  int(2)
  ["orange"]=>
  int(2)
  ["banana"]=>
  int(1)
  ["grape"]=>
  int(1)
  ["mango"]=>
  int(1)
}

Different fruit list

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...