2010-06-05 86 views
1

我有这样如何找到重复的和最高值在数组

array={'a'=>'2','b'=>'5', 'c'=>'6', 'd'=>'6', 'e'=>'2'}; 

的数组值数组可能取决于$ _ POST变量是不同的。我的问题是如何找到我的数组中的最高值并返回索引键。在我的情况下,我需要得到'c'和'd',值为6.不知道如何做到这一点。任何帮助将不胜感激。谢谢。

回答

4
$max = max(array_values($array)); 
$keys = array_keys($array, $max); 
+0

感谢您的回复。 +1 – FlyingCat 2010-06-05 13:39:32

+3

你不应该使用'max(array_values($ array))'嵌入。 OP只想获得价值。将它分成两个语句。 '$ keys'将只包含这些键。 – 2010-06-05 13:39:35

+0

@Felix Kling - 我没有想到他并不关心最大数量...... – mmattax 2010-06-05 13:42:14

0

或者这应该做的魔力,它可能会比PHP快的内置功能

$maxValue = -1; 
$max = array(); 
foreach ($items as $key => $item) { 
    if ($item == $maxValue) { 
     $max[] = $key; 
    } elseif ($item > $maxValue) { 
     $max = array(); 
     $max[] = $key; 
     $maxValue = $item; 
    } 
} 
+1

请你解释为什么这可能更快? – 2010-06-05 13:36:33

+0

最大值,array_keys和array_values最可能都是遍历数组,我的函数只是一次。然而,无论如何,这是如此之快无关紧要。 – 2010-06-05 14:15:40

1

看一看arsort将逆向排序数组,并保持索引关系。所以:

arsort($array); 

这将以数组顶部的最大值结束。取决于你需要的array_unique可以从你的数组中删除重复的值。

+0

我需要获取重复值的索引。但thx虽然。 +1 – FlyingCat 2010-06-05 13:38:42

+1

排序为O(n log n)。这可以在O(n)中完成。 – 2010-06-05 13:40:10

1
$array = array(
    'key1' => 22, 
    'key2' => 17, 
    'key3' => 19, 
    'key4' => 21, 
    'key5' => 24, 
    'key6' => 8, 
); 

function getHighest($array) 
{ 
    $highest = 0; 
    foreach($array as $index => $value) 
    { 
     if(is_numeric($value) && $value > $highest) 
     { 
      $highest = $index; 
     } 
    } 
    return $highest; 
} 

echo getHighest($array); //key5 
+0

我需要得到重复的密钥索引。虽然功能很好。 +1 – FlyingCat 2010-06-05 13:40:55

+0

更改为返回索引键。 – RobertPitt 2010-06-05 13:41:31

相关问题