我有一系列这样的数字:
$array = array(1,1,1,4,3,1);
如何获得最重复值的计数?
答案 0 :(得分:13)
这应该有效:
$count=array_count_values($array);//Counts the values in the array, returns associatve array
arsort($count);//Sort it from highest to lowest
$keys=array_keys($count);//Split the array so we can find the most occuring key
echo "The most occuring value is $keys[0][1] with $keys[0][0] occurences."
答案 1 :(得分:4)
我认为array_count_values函数对您有用。有关详细信息,请参阅本手册:http://php.net/manual/en/function.array-count-values.php
答案 2 :(得分:3)
如果您的数组只包含字符串或整数,则可以使用array_count_values
和arsort
:
$array = array(1, 1, 1, 4, 3, 1);
$counts = array_count_values($array);
arsort($counts);
这会使最常用的元素成为$counts
的第一个元素。你可以get the count amount and value afterwards。
重要的是要注意,如果原始数组中存在多个具有相同出现次数的元素,我无法确定您将获得哪个元素。一切都取决于array_count_values
和arsort
的实施。如果您需要任何特定的,不做任何假设,您需要对此进行全面测试,以防止以后出现错误。
如果您需要任何特定的一个,最好不要使用arsort
并自行编写减少循环。
$array = array(1, 1, 1, 4, 3, 1);
/* Our return values, with some useless defaults */
$max = 0;
$max_item = $array[0];
$counts = array_count_values($array);
foreach ($counts as $value => $amount) {
if ($amount > $max) {
$max = $amount;
$max_item = $value;
}
}
在foreach循环之后,$max_item
包含原始数组中出现次数最多的项目,只要array_count_values
按照找到的顺序返回元素(这似乎是基于案例的)关于文档的例子)。您可以使用非严格比较($amount >= $max
代替$amount > $max
)使第一个项目在原始数组中显示得最多。
您甚至可以通过这种方式将所有元素与最大出现次数联系起来:
$array = array(1, 1, 1, 4, 3, 1);
/* Our return values */
$max = 0;
$max_items = array();
$counts = array_count_values($array);
foreach ($counts as $value => $amount) {
if ($amount > $max) {
$max = $amount;
$max_items = array($value);
} elif ($amount = $max) {
$max_items[] = $value;
}
}
答案 3 :(得分:2)
您可以使用array_count_values
计算数组中值的出现次数:
$counts = array_count_values($array);
然后对计数进行反向排序:
arsort($counts);
然后检查最高值以获得您的模式。
$mode = key($counts);
答案 4 :(得分:1)
$vals = array_count_values($arr);
asort($vals);
//you may need this end($vals);
echo key($vals);
我不记得默认情况下asort sort asc或desc,你可以看到代码中的注释。
答案 5 :(得分:0)
<?php
$arrrand = '$arr = array(';
for ($i = 0; $i < 100000; $i++)
{
$arrrand .= rand(0, 1000) . ',';
}
$arrrand = substr($arrrand, 0, -1);
$arrrand .= ');';
eval($arrrand);
$start1 = microtime();
$count = array_count_values($arr);
$end1 = microtime();
echo $end1 - $start1;
echo '<br>';
$start2 = microtime();
$tmparr = array();
foreach ($arr as $key => $value);
{
if (isset($tmparr[$value]))
{
$tmparr[$value]++;
} else
{
$tmparr[$value] = 1;
}
}
$end2 = microtime();
echo $end2 - $start2;
这里检查两个解决方案:
1 array_count_values()
和一个手工。
答案 6 :(得分:0)
<?php
$input = array(1,2,2,2,8,9);
$output = array();
$maxElement = 0;
for($i=0;$i<count($input);$i++) {
$count = 0;
for ($j = 0; $j < count($input); $j++) {
if ($input[$i] == $input[$j]) {
$count++;
}
}
if($count>$maxElement){
$maxElement = $count;
$a = $input[$i];
}
}
echo $a.' -> '.$maxElement;
输出为 2 -> 3
答案 7 :(得分:-1)
$arrays = array(1, 2, 2, 2, 3, 1); // sample array
$count=array_count_values($arrays); // getting repeated value with count
asort($count); // sorting array
$key=key($count);
echo $arrays[$key]; // get most repeated value from array
答案 8 :(得分:-1)
字符串S;
Scanner in = new Scanner(System.in);
System.out.println("Enter the String: ");
S = in.nextLine();
int count =1;
int max = 1;
char maxChar=S.charAt(0);
for(int i=1; i <S.length(); i++)
{
count = S.charAt(i) == S.charAt(i - 1) ? (count + 1):1;
if(count > max)
{
max = count;
maxChar = S.charAt(i);
}
}
System.out.println("Longest run: "+max+", for the character "+maxChar);
答案 9 :(得分:-1)
这是解决方案
class TestClass {
public $keyVal;
public $keyPlace = 0;
//put your code here
public function maxused_num($array) {
$temp = array();
$tempval = array();
$r = 0;
for ($i = 0; $i <= count($array) - 1; $i++) {
$r = 0;
for ($j = 0; $j <= count($array) - 1; $j++) {
if ($array[$i] == $array[$j]) {
$r = $r + 1;
}
}
$tempval[$i] = $r;
$temp[$i] = $array[$i];
}
//fetch max value
$max = 0;
for ($i = 0; $i <= count($tempval) - 1; $i++) {
if ($tempval[$i] > $max) {
$max = $tempval[$i];
}
}
//get value
for ($i = 0; $i <= count($tempval) - 1; $i++) {
if ($tempval[$i] == $max) {
$this->keyVal = $tempval[$i];
$this->keyPlace = $i;
break;
}
}
// 1.place holder on array $this->keyPlace;
// 2.number of reapeats $this->keyVal;
return $array[$this->keyPlace];
}
}
$ catch = new TestClass(); $ array = array(1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,3,1,2,3,1,1,2 ,5,7,1,9,0,11,22,1,1,22,22,35,66,1,1,1); echo $ catch-&gt; maxused_num($ array);