Pesquise a chave / índice mais alto em uma matriz

92

Como posso obter com PHP a maior chave / índice em uma matriz? Eu sei fazer isso pelos valores.

Por exemplo, desta matriz, gostaria de obter "10" como um valor inteiro:

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

Eu sei como poderia programar, mas estava me perguntando se havia uma função para isso também.

Raffael Luthiger
fonte

Respostas:

205

Isso deve funcionar bem

$arr = array( 1 => "A", 10 => "B", 5 => "C" );
max(array_keys($arr));
Gérald Croës
fonte
Você sabe se funcionaria tão bem se uma chave fosse definida como esta: $ arr = array (1 => "A", 10 => "B", 5 => "C", "15" => "D ");
Raffael Luthiger
2
@Raffael Luthiger tente testá-lo e veja se obtém os resultados corretos.
Jonathan Kuhn
1
Isso não lida com o caso de uma matriz vazia. Direto do manual do PHP para max:If an empty array is passed, then FALSE will be returned and an E_WARNING error will be emitted.
Sifão de
33

Você pode obter a chave máxima desta forma:

<?php
$arr = array("a"=>"test", "b"=>"ztest");
$max = max(array_keys($arr));
?>
Fabrizio D'Ammassa
fonte
Sinto muito, alguém postou a mesma resposta antes de mim.
Fabrizio D'Ammassa
2
$keys = array_keys($arr);
$keys = rsort($keys);

print $keys[0];

deve imprimir "10"

Cfreak
fonte
2

Tive uma situação em que precisava obter a próxima chave disponível em uma matriz, que é o + 1 mais alto.

Por exemplo, se a matriz é $ data = ['1' => 'alguma coisa, '34' => 'outra coisa'], então eu precisava calcular 35 para adicionar um novo elemento à matriz que tinha uma chave maior do que qualquer dos outros. No caso de um array vazio, eu precisava de 1 como próxima chave disponível.

Esta é a solução que funcionou:

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

Funcionará em todos os casos, matriz vazia ou não. Se você só precisa encontrar a chave mais alta em vez da chave mais alta + 1, exclua a última linha. Você obterá o valor 0 se a matriz estiver vazia.

JG Estiot
fonte