109

How can I get the highest key/index in an array with ? I know how to do it for the values.

E.g.: from this array I would like to get 10 as an integer value:

$arr = array(1 => "A", 10 => "B", 5 => "C");

I know how I could code it but I was asking myself if there is a function for this as well.

7 Answers 7

241

This should work fine

$arr = array( 1 => "A", 10 => "B", 5 => "C" );
max(array_keys($arr));
Sign up to request clarification or add additional context in comments.

4 Comments

Do you know if it would work as well if one key is set like this: $arr = array( 1 => "A", 10 => "B", 5 => "C", "15" => "D");
@Raffael Luthiger try testing it and see if you get the right results.
This doesn't handle the case of an empty array. Straight from the PHP manual for max: If an empty array is passed, then FALSE will be returned and an E_WARNING error will be emitted.
does not work for empty / 1 element array
38

You can get the maximum key this way:

<?php
$arr = array("a"=>"test", "b"=>"ztest");
$max = max(array_keys($arr));
?>

2 Comments

I'm sorry, someone posted the same answer before me.
does not work for empty / 1 element array
2

I had a situation where I needed to obtain the next available key in an array, which is the highest + 1.

For example, if the array is $data = ['1' => 'something, '34' => 'something else'], then I needed to calculate 35 to add a new element to the array that had a key higher than any of the others. In the case of an empty array I needed 1 as next available key.

This is the solution that worked:

$highest = 0;
foreach ($data as $idx => $dummy) {
    if ($idx > $highest) $highest = $idx;
}
$highest++;

It will work in all cases, empty array or not. If you only need to find the highest key rather than highest key + 1, delete the last line.

You will then get a value of 0 if the array is empty.

Comments

1
$keys = array_keys($arr);
$keys = rsort($keys);

print $keys[0];

should print "10"

1 Comment

rsort always return true php.net/manual/en/function.rsort.php
1
function getMaxKey(array $array): ?int
{
    if ($array === []) {
        return null;
    }

    return max(0, ...array_keys($array));
}

assuming you don't have negative keys like int -1

Comments

0

Try max() function, see the first comment on that page.

3 Comments

Will max() works if keys are date?
@amir22 - not sure, post an example of your array or just try it
The question was related to the keys. The max function does not work with the keys, but with the values ​​of arrays.
-3
$higestKey = 0;
foreach ($data as $key => $value) {
    if (strlen($key) > $higestKey) $higestKey = strlen($key);
}

1 Comment

What has the length of key string to do with the highest key? This also assumes that keys are strings which also isn't true for the data shown in the question.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.