4

我有一个这样的数字数组:

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

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

4

10 回答 10

15

这应该有效:

$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."
于 2012-05-16T04:45:41.723 回答
4

我认为 array_count_values 函数对你有用。查看本手册了解详情: http: //php.net/manual/en/function.array-count-values.php

于 2012-05-16T04:48:20.070 回答
4

您可以使用以下方法计算数组中值的出现次数array_count_values

$counts = array_count_values($array);

然后对计数进行反向排序:

arsort($counts);

然后检查最高值以获取您的模式。

$mode = key($counts);
于 2012-05-16T04:50:00.433 回答
3

如果您的数组仅包含字符串或整数,您可以使用array_count_valuesand arsort

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

$counts = array_count_values($array);
arsort($counts);

这会将最常用的元素保留为 的第一个元素$counts。之后可以得到计数的数量和价值

重要的是要注意,如果原始数组中有多个出现次数相同的元素,我不能确定你会得到哪一个。一切都取决于 和 的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;
    }
}
于 2012-05-16T04:59:42.577 回答
1
$vals = array_count_values($arr);
asort($vals);
//you may need this end($vals);
echo key($vals);

我不记得asort默认排序是asc还是desc,你可以看到代码中的注释。

于 2012-05-16T04:49:30.013 回答
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;

在这里检查两种解决方案:1array_count_values() 手动。

于 2016-06-07T21:42:44.597 回答
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

于 2021-07-03T14:49:07.693 回答
-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
于 2014-03-03T13:43:11.790 回答
-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); 
于 2015-04-09T06:00:05.843 回答
-1

这是解决方案

类测试类{

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->maxused_num($array);

于 2016-04-12T12:16:18.130 回答