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;