获取数组中最重复的值

时间:2012-05-16 04:42:24

标签: php arrays

我有一系列这样的数字:

$array = array(1,1,1,4,3,1);

如何获得最重复值的计数?

10 个答案:

答案 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_valuesarsort

$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_valuesarsort的实施。如果您需要任何特定的,不做任何假设,您需要对此进行全面测试,以防止以后出现错误。

如果您需要任何特定的一个,最好不要使用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);