Cari kunci / indeks tertinggi dalam sebuah larik

93

Bagaimana saya bisa mendapatkan dengan PHP kunci / indeks tertinggi dalam sebuah array? Saya tahu bagaimana melakukannya untuk nilai-nilai.

Misalnya, dari larik ini saya ingin mendapatkan "10" sebagai nilai integer:

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

Saya tahu bagaimana saya bisa memprogramnya, tetapi saya bertanya pada diri sendiri apakah ada fungsi untuk ini juga.

Raffael Luthiger
sumber

Jawaban:

207

Ini seharusnya bekerja dengan baik

$arr = array( 1 => "A", 10 => "B", 5 => "C" );
max(array_keys($arr));
Gérald Croës
sumber
Apakah Anda tahu apakah itu akan bekerja dengan baik jika satu kunci disetel seperti ini: $ arr = array (1 => "A", 10 => "B", 5 => "C", "15" => "D ");
Raffael Luthiger
2
@Raffael Luthiger coba mengujinya dan lihat apakah Anda mendapatkan hasil yang tepat.
Jonathan Kuhn
1
Ini tidak menangani kasus array kosong. Langsung dari manual PHP untuk max:If an empty array is passed, then FALSE will be returned and an E_WARNING error will be emitted.
Siphon
33

Anda bisa mendapatkan kunci maksimum dengan cara ini:

<?php
$arr = array("a"=>"test", "b"=>"ztest");
$max = max(array_keys($arr));
?>
Fabrizio D'Ammassa
sumber
Maaf, seseorang memposting jawaban yang sama sebelum saya.
Fabrizio D'Ammassa
2
$keys = array_keys($arr);
$keys = rsort($keys);

print $keys[0];

harus mencetak "10"

Cfreak
sumber
2

Saya mengalami situasi di mana saya perlu mendapatkan kunci yang tersedia berikutnya dalam sebuah array, yang merupakan +1 tertinggi.

Misalnya, jika array adalah $ data = ['1' => 'something, '34' => 'something else'] maka saya perlu menghitung 35 untuk menambahkan elemen baru ke array yang memiliki kunci lebih tinggi dari yang manapun dari yang lain. Dalam kasus array kosong saya membutuhkan 1 sebagai kunci yang tersedia berikutnya.

Ini adalah solusi yang berhasil:

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

Ini akan bekerja di semua kasus, array kosong atau tidak. Jika Anda hanya perlu menemukan kunci tertinggi daripada kunci tertinggi + 1, hapus baris terakhir. Anda kemudian akan mendapatkan nilai 0 jika array kosong.

JG Estiot
sumber