Поиск наивысшего ключа / индекса в массиве

93

Как я могу получить с помощью PHP самый высокий ключ / индекс в массиве? Я знаю, как это сделать ради ценностей.

Например, из этого массива я хотел бы получить "10" как целое число:

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

Я знаю, как я могу его запрограммировать, но я спрашивал себя, есть ли функция для этого.

Рафаэль Лютигер
источник

Ответы:

207

Это должно работать нормально

$arr = array( 1 => "A", 10 => "B", 5 => "C" );
max(array_keys($arr));
Жеральд Кроэ
источник
Знаете ли вы, будет ли это работать, если один ключ установлен следующим образом: $ arr = array (1 => "A", 10 => "B", 5 => "C", "15" => "D ");
Рафаэль Лютигер
2
@Raffael Luthiger попробуйте протестировать его и посмотрите, получите ли вы правильные результаты.
Джонатан Кун
1
Это не касается случая пустого массива. Прямо из PHP руководства max:If an empty array is passed, then FALSE will be returned and an E_WARNING error will be emitted.
сифон
33

Получить максимальный ключ можно следующим образом:

<?php
$arr = array("a"=>"test", "b"=>"ztest");
$max = max(array_keys($arr));
?>
Фабрицио Д'Аммасса
источник
Извините, кто-то написал до меня такой же ответ.
Фабрицио Д'Аммасса
2
$keys = array_keys($arr);
$keys = rsort($keys);

print $keys[0];

должен напечатать "10"

Cfreak
источник
2

У меня была ситуация, когда мне нужно было получить следующий доступный ключ в массиве, который является максимальным + 1.

Например, если массив равен $ data = ['1' => 'something, '34' => 'something else'], то мне нужно было вычислить 35, чтобы добавить новый элемент в массив, у которого был ключ выше любого из других. В случае пустого массива мне понадобилась 1 в качестве следующего доступного ключа.

Это решение, которое сработало:

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

Он будет работать во всех случаях, пустой массив или нет. Если вам нужно найти только самый высокий ключ, а не самый высокий ключ + 1, удалите последнюю строку. Затем вы получите значение 0, если массив пуст.

JG Estiot
источник