Jamie McElwain
Jamie McElwain

Reputation: 643

PHP Get Highest Value from Array

I'm trying to get hold of the largest value in an array, while still preserving the item labels. I know I can do this by running sort(), but if I do so I simply lose the labels - which makes it pointless for what I need. Here's the array:

array("a"=>1,"b"=>2,"c"=>4,"d"=>5);

Any ideas?

Upvotes: 63

Views: 186711

Answers (17)

Muhammad Bilal
Muhammad Bilal

Reputation: 3008

Find largest number without using built-in functions in PHP

<?php
    $array = array(1,2,3);
    $flag = 0;
    foreach($array as $key=>$val){
        if($val > $flag){
           $flag = $val;
        }
        echo "Max value with each iteration: ".$flag."<br/>";
    }
    echo "Final max value: ".$flag;
    ?>

Upvotes: -1

Yin Yong
Yin Yong

Reputation: 11

Try it.

$data = array("a"=>1,"b"=>2,"c"=>4,"d"=>5); $maxKey = current(array_keys($data, max($data))); var_dump($maxKey);

Upvotes: 1

Erich Garc&#237;a
Erich Garc&#237;a

Reputation: 1874

Here a solution inside an exercise:

function high($sentence)
{
    $alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
    $alphabet = array_flip($alphabet);

    $words = explode(" ", $sentence);

    foreach ($words as $word) {
        $letters = str_split($word);
        $points = 0;
        foreach ($letters as $letter)
            $points += $alphabet[$letter];
        $score[$word] = $points;
    }

    $value = max($score);
    $key = array_search($value, $score);

    return $key;
}

echo high("what time are we climbing up the volcano");

Upvotes: -1

Khushal Singh Dangwal
Khushal Singh Dangwal

Reputation: 21

$ee = array('a' => 50, 'b' => 25, 'c' => 5, 'd' => 80, 'e' => 40, 'f' => 152, 'g' => 45, 'h' => 28);
$Acurr = '';
$Amax = 0;

foreach($ee as $key => $value) {
    $Acurr = $value;    

    if($Acurr >= $Amax) {
        $Amax = $Acurr; 
    }
}

echo "greatest number is $Amax";

Upvotes: 1

Jason Mullings
Jason Mullings

Reputation: 1004

Find highest number, including negative:

return max([abs(max($array)),abs(min($array))]);

Upvotes: 0

Rakesh
Rakesh

Reputation: 69

$a = array(10, 20, 52, 105, 56, 89, 96);
$b = 0;
foreach ($a as $key=>$val) {
    if ($val > $b) {
        $b = $val;
    }
}
echo $b;

Upvotes: 6

Ashish Pathak
Ashish Pathak

Reputation: 824

greatestValue=> try this its very easy

$a=array(10,20,52,105,56,89,96);
$c=0;
foreach($a as $b)
{
if($b>$c)
$c=$b;

}
echo $c;

Upvotes: 1

SergeS
SergeS

Reputation: 11779

Try using asort().

From documentation:

asort - Sort an array and maintain index association

Description:

bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )

This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant.

Upvotes: -3

Vladymyr Drogovoz
Vladymyr Drogovoz

Reputation: 1

You need to use by ksort(array("a"=>1,"b"=>2,"c"=>4,"d"=>5)); for more info: http://www.w3schools.com/php/php_arrays_sort.asp

Upvotes: -1

Hanifeoglu
Hanifeoglu

Reputation: 49

<?php 
$array = array("a"=>1,"b"=>2,"c"=>4,"d"=>5); 

foreach ($array as $key => $value) {
   if ($value >= $max) 
    $max = $key;     
}
echo " The array in largest number :".$max."<br/>";
?> 

Upvotes: 0

ajay Sharavat
ajay Sharavat

Reputation: 46

$abc=array("a"=>1,"b"=>2,"c"=>4,"e"=>7,"d"=>5);
/*program to find max value*/
$lagest = array();
$i=0;
foreach($abc as $key=>$a) {
    if($i==0) $b=$a;
    if($b<$a) {
        $b=$a;
        $k=$key;
    }
    $i++;
 }
 $lagest[$k]=$b;
 print_r($lagest);

Upvotes: 0

borrible
borrible

Reputation: 17356

If you just want the largest value in the array use the max function. This will return the largest value, although not the corresponding key. It does not change the original array.

If you care about the the key you could then do

$key = array_search(max($array), $array)

(Edited to include @binaryLV's suggestion)

Upvotes: 25

binaryLV
binaryLV

Reputation: 9122

You could use max() for getting the largest value, but it will return just a value without an according index of array. Then, you could use array_search() to find the according key.

$array = array("a"=>1,"b"=>2,"c"=>4,"d"=>5);
$maxValue = max($array);
$maxIndex = array_search(max($array), $array);
var_dump($maxValue, $maxIndex);

Output:

int 5
string 'd' (length=1)

If there are multiple elements with the same value, you'll have to loop through array to get all the keys.

It's difficult to suggest something good without knowing the problem. Why do you need it? What is the input, what is the desired output?

Upvotes: 5

Karoly Horvath
Karoly Horvath

Reputation: 96266

Don't sort the array to get the largest value.

Get the max value:

$value = max($array);

Get the corresponding key:

$key = array_search($value, $array);

Upvotes: 173

erenon
erenon

Reputation: 19118

// assuming positive numbers

$highest_key;
$highest_value = 0;
foreach ($array as $key => $value) {
    if ($value > $highest_value) {
        $highest_key = $key;
    }
}

// $highest_key holds the highest value

Upvotes: 0

Stefan Gehrig
Stefan Gehrig

Reputation: 83622

asort() is the way to go:

$array = array("a"=>1,"b"=>2,"c"=>4,"d"=>5);
asort($array);
$highestValue       = end($array);
$keyForHighestValue = key($array);

Upvotes: -1

Jacob
Jacob

Reputation: 43229

You are looking for asort()

Upvotes: 5

Related Questions