Busque la clave / índice más alto en una matriz

92

¿Cómo puedo obtener con PHP la clave / índice más alto en una matriz? Sé cómo hacerlo por los valores.

Por ejemplo, de esta matriz me gustaría obtener "10" como valor entero:

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

Sé cómo podría programarlo, pero me preguntaba si también había una función para esto.

Raffael Luthiger
fuente

Respuestas:

205

Esto debería funcionar bien

$arr = array( 1 => "A", 10 => "B", 5 => "C" );
max(array_keys($arr));
Gérald Croës
fuente
¿Sabe si funcionaría también si una clave se configura así: $ arr = array (1 => "A", 10 => "B", 5 => "C", "15" => "D ");
Raffael Luthiger
2
@Raffael Luthiger intente probarlo y vea si obtiene los resultados correctos.
Jonathan Kuhn
1
Esto no maneja el caso de una matriz vacía. Directamente del manual de PHP para max:If an empty array is passed, then FALSE will be returned and an E_WARNING error will be emitted.
Sifón
33

Puede obtener la clave máxima de esta manera:

<?php
$arr = array("a"=>"test", "b"=>"ztest");
$max = max(array_keys($arr));
?>
Fabrizio D'Ammassa
fuente
Lo siento, alguien publicó la misma respuesta antes que yo.
Fabrizio D'Ammassa
2
$keys = array_keys($arr);
$keys = rsort($keys);

print $keys[0];

debe imprimir "10"

Cfreak
fuente
2

Tuve una situación en la que necesitaba obtener la siguiente clave disponible en una matriz, que es el +1 más alto.

Por ejemplo, si la matriz es $ data = ['1' => 'algo, '34' => 'algo más'], entonces necesitaba calcular 35 para agregar un nuevo elemento a la matriz que tenía una clave más alta que cualquier de los demás. En el caso de una matriz vacía, necesitaba 1 como siguiente clave disponible.

Esta es la solución que funcionó:

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

Funcionará en todos los casos, matriz vacía o no. Si solo necesita encontrar la clave más alta en lugar de la clave más alta + 1, elimine la última línea. Luego obtendrá un valor de 0 si la matriz está vacía.

JG Estiot
fuente