Php 获取数组中重复次数最多的值

Php 获取数组中重复次数最多的值,php,arrays,Php,Arrays,我有一个这样的数字数组: $array = array(1,1,1,4,3,1); 如何获得最重复值的计数?这应该可以: $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 w

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

$array = array(1,1,1,4,3,1);
如何获得最重复值的计数?

这应该可以:

$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."

我认为array\u count\u values函数对您很有用。有关详细信息,请参阅本手册:


我不记得默认情况下asort是否对asc或desc进行排序,您可以在代码中看到注释。

您可以使用
array\u count\u value来计算数组中值的出现次数:

$counts = array_count_values($array);
然后对计数进行反向排序:

arsort($counts);
然后检查最大值以获得您的模式

$mode = key($counts);

如果数组仅包含字符串或整数,则可以使用

这将使使用最多的元素成为
$counts
中的第一个元素。你可以

需要注意的是,如果在原始数组中有多个元素的出现次数相同,我无法确定将得到哪一个。一切都取决于
array\u count\u值
arsort
的实现。如果需要任何特定的bug,您需要彻底测试它以防止以后出现bug,不要做任何假设

如果您需要任何特定的还原循环,最好不要使用
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\u item
包含原始数组中显示最多的最后一个项,只要
数组计数\u值
按元素的查找顺序返回元素(根据文档示例,这种情况似乎是这样的)。通过使用非严格比较(
$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;
    }
}
字符串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); 
Scanner-in=新的扫描仪(System.in);
System.out.println(“输入字符串:”);
S=in.nextLine();
整数计数=1;
int max=1;
char maxChar=S.charAt(0);
对于(int i=1;i max)
{
最大值=计数;
maxChar=S.charAt(i);
}
}
System.out.println(“最长运行时间:+max+”,用于字符“+maxChar”);
以下是解决方案

类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];
}
public$keyVal;
public$keyPlace=0;
//把你的代码放在这里
公共函数maxused_num($array){
$temp=array();
$tempval=array();
$r=0;
对于($i=0;$i密钥位置;
//2.重复次数$this->keyVal;
返回$array[$this->keyPlace];
}
}

$catch=newtestclass(); $array=数组(1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,3,1,1,2,5,7,1,9,0,11,22,1,22,22,35,66,1,1,1,1,1,1,1);
echo$catch->maxused_num($array);

可能重复这听起来像是家庭作业。上面的链接对于家庭作业来说太聪明了。不公平;)!但“重复的问题”是!这听起来确实像是一个“家庭作业”。但您从未尝试过帮助:-(.您的输入会很有帮助。@paulsm4.它对我很有用。我真的很想在没有循环的情况下实现这一点。非常感谢@peet代码很好,但输出不起作用。正确的答案是:
echo“最常出现的值是“$keys[0]”和“$count[$keys[0]”一起出现。”
问题是针对PHP的——如果不对底层方法进行更多解释,这个Java答案可能没有帮助。语法可能会有所不同,但逻辑将保持不变。绝对如此。不过,请看一下其他答案。通过添加额外的上下文和/或注释,它们可以更清楚地说明问题。
$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
    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); 
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];
}
<?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;