Wyszukaj najwyższy klucz / indeks w tablicy

93

Jak w PHP uzyskać najwyższy klucz / indeks w tablicy? Wiem, jak to zrobić dla wartości.

Np. Z tej tablicy chciałbym otrzymać „10” jako wartość całkowitą:

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

Wiem, jak mógłbym to zaprogramować, ale zadawałem sobie pytanie, czy istnieje również funkcja do tego.

Raffael Luthiger
źródło

Odpowiedzi:

207

To powinno działać dobrze

$arr = array( 1 => "A", 10 => "B", 5 => "C" );
max(array_keys($arr));
Gérald Croës
źródło
Czy wiesz, czy zadziałałoby również, gdyby jeden klucz był ustawiony w ten sposób: $ arr = array (1 => "A", 10 => "B", 5 => "C", "15" => "D ");
Raffael Luthiger,
2
@Raffael Luthiger spróbuj go przetestować i zobacz, czy uzyskasz właściwe wyniki.
Jonathan Kuhn
1
To nie obsługuje przypadku pustej tablicy. Prosto z instrukcji PHP dla max:If an empty array is passed, then FALSE will be returned and an E_WARNING error will be emitted.
Siphon
33

Możesz uzyskać maksymalny klucz w ten sposób:

<?php
$arr = array("a"=>"test", "b"=>"ztest");
$max = max(array_keys($arr));
?>
Fabrizio D'Ammassa
źródło
Przepraszam, ktoś wysłał przede mną tę samą odpowiedź.
Fabrizio D'Ammassa
2
$keys = array_keys($arr);
$keys = rsort($keys);

print $keys[0];

powinien wydrukować „10”

Cfreak
źródło
2

Miałem sytuację, w której potrzebowałem uzyskać następny dostępny klucz w tablicy, czyli najwyższy + 1.

Na przykład, jeśli tablica to $ data = ['1' => 'coś, '34' => 'coś innego'], musiałem obliczyć 35, aby dodać nowy element do tablicy, który miał klucz wyższy niż jakikolwiek inny innych. W przypadku pustej tablicy potrzebowałem 1 jako następnego dostępnego klucza.

Oto rozwiązanie, które zadziałało:

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

Będzie działać we wszystkich przypadkach, pusta tablica lub nie. Jeśli potrzebujesz tylko znaleźć najwyższy klawisz, a nie najwyższy klawisz + 1, usuń ostatnią linię. Otrzymasz wtedy wartość 0, jeśli tablica jest pusta.

JG Estiot
źródło