2010-06-05 3 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

+3

Вы не должны использовать 'max (array_values ​​($ array))' inline. OP только хочет получить значение. Разделите его на два утверждения. '$ keys' будет содержать только ключи. –

+0

@Felix Kling - Я не думал, что он не заботится о максимальном количестве ... – mmattax

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

Не могли бы вы объяснить, почему это, вероятно, быстрее? –

+0

Макс, array_keys и array_values, скорее всего, все итерации через массив, моя функция только один раз. Тем не менее, это так быстро, в любом случае это не имеет значения. –

1

Посмотрите arsort, который будет сортировать массив в обратном порядке и поддерживать ассоциацию индексов. Таким образом:

arsort($array); 

Это будет иметь наибольшие значения в верхней части массива. В зависимости от того, что вам нужно array_unique может удалить повторяющиеся значения из вашего массива.

+0

Мне нужно получить индекс дублированного значения. Но все же. +1 – FlyingCat

+1

Сортировка - O (n log n). Это можно сделать в O (n). –

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

+0

изменен, чтобы вернуть индексный ключ. – RobertPitt

Смежные вопросы