问题描述
假设我有一个水果数组,我想知道哪个或哪一个是最重复的,例如:
$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
]
,
使用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)
}