Bir dizide en yüksek anahtar / dizini ara


94

PHP ile bir dizideki en yüksek anahtarı / dizini nasıl elde edebilirim? Değerler için nasıl yapılacağını biliyorum.

Örneğin, bu diziden bir tamsayı değeri olarak "10" elde etmek istiyorum:

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

Nasıl programlayacağımı biliyorum ama bunun için de bir işlev olup olmadığını kendime soruyordum.

Yanıtlar:


208

Bu iyi çalışmalı

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

Bir anahtar şöyle ayarlanırsa, bunun da işe yarayıp yaramayacağını biliyor musunuz: $ arr = array (1 => "A", 10 => "B", 5 => "C", "15" => "D ");
Raffael Luthiger

2
@Raffael Luthiger test etmeyi deneyin ve doğru sonuçları alıp almadığınızı görün.
Jonathan Kuhn

1
Bu, boş bir dizi durumunu işlemez. Doğrudan PHP kılavuzundan max:If an empty array is passed, then FALSE will be returned and an E_WARNING error will be emitted.
Siphon

34

Maksimum anahtarı şu şekilde elde edebilirsiniz:

<?php
$arr = array("a"=>"test", "b"=>"ztest");
$max = max(array_keys($arr));
?>

Üzgünüm, biri benden önce aynı cevabı gönderdi.
Fabrizio D'Ammassa

2
$keys = array_keys($arr);
$keys = rsort($keys);

print $keys[0];

"10" yazdırmalı


2

Bir dizideki bir sonraki kullanılabilir anahtarı elde etmem gereken bir durum vardı, bu en yüksek + 1'dir.

Örneğin, dizi $ data = ['1' => 'bir şey, '34' => 'başka bir şey'] ise, diziye herhangi birinden daha yüksek bir anahtara sahip yeni bir öğe eklemek için 35 hesaplamam gerekiyordu diğerlerinden. Boş bir dizi durumunda, bir sonraki kullanılabilir anahtar olarak 1'e ihtiyacım vardı.

İşe yarayan çözüm şudur:

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

Her durumda çalışır, boş dizi olsun ya da olmasın. En yüksek anahtar + 1 yerine yalnızca en yüksek anahtarı bulmanız gerekiyorsa, son satırı silin. Dizi boşsa, 0 değerini alırsınız.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.