Search for highest key/index in an array
Asked Answered
T

7

108

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.

Transposition answered 25/5, 2011 at 14:30 Comment(0)
W
239

This should work fine

$arr = array( 1 => "A", 10 => "B", 5 => "C" );
max(array_keys($arr));
Waterfall answered 25/5, 2011 at 14:34 Comment(4)
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");Transposition
@Raffael Luthiger try testing it and see if you get the right results.Sparrow
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.Radiotelephone
does not work for empty / 1 element arrayHautevienne
S
37

You can get the maximum key this way:

<?php
$arr = array("a"=>"test", "b"=>"ztest");
$max = max(array_keys($arr));
?>
Secretory answered 25/5, 2011 at 14:36 Comment(2)
I'm sorry, someone posted the same answer before me.Devise
does not work for empty / 1 element arrayHautevienne
D
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.

Ductile answered 30/9, 2019 at 7:41 Comment(0)
H
1
$keys = array_keys($arr);
$keys = rsort($keys);

print $keys[0];

should print "10"

Heilbronn answered 25/5, 2011 at 14:33 Comment(1)
rsort always return true php.net/manual/en/function.rsort.phpHautevienne
H
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

Hautevienne answered 21/9, 2021 at 14:37 Comment(0)
S
0

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

Saveloy answered 25/5, 2011 at 14:33 Comment(3)
Will max() works if keys are date?Truncated
@Truncated - not sure, post an example of your array or just try itSaveloy
The question was related to the keys. The max function does not work with the keys, but with the values ​​of arrays.Solemnize
C
-3
$higestKey = 0;
foreach ($data as $key => $value) {
    if (strlen($key) > $higestKey) $higestKey = strlen($key);
}
Cherrylchersonese answered 17/7, 2021 at 23:56 Comment(1)
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.Tarim

© 2022 - 2024 — McMap. All rights reserved.