(Muhtemelen) ilişkisel dizi ilk anahtarı alın?

7 Cevap php

Bir olasılıkla ilişkisel dizi ilk anahtarı belirlemek için en iyi yolu nedir? Benim ilk sadece dizi foreach ve sonra hemen bu gibi kırılma düşündüm:

foreach ($an_array as $key => $val) break;

Böylece $ anahtara sahip ilk anahtarı ihtiva eder, fakat bu verimsiz görünmektedir. Herkes daha iyi bir çözüm var mı?

7 Cevap

array_keys tuşları bir dizi döndürür. Ilk giriş atın. Alternatif olarak, dizide reset diyebiliriz, ve sonra key. İkinci yaklaşım (Thoug bunu test etmedi) biraz daha hızlı muhtemelen, ama iç işaretçi sıfırlama yan etkisi vardır.

key($an_array) Size ilk anahtarı verecek

Blixt başına edit: Eğer key($an_array) dizinin başlangıcına işaretçi sıfırlamak için önce reset($array); aramalısınız.

Verimlilik sizin için önemli değilse, sen array_keys($yourArray)[0] PHP 5.4 (ve üstü) kullanabilirsiniz.

Examples:

# 1
$arr = ["my" => "test", "is" => "best"];    
echo array_keys($arr)[0] . "\r\n"; // prints "my"


# 2
$arr = ["test", "best"];
echo array_keys($arr)[0] . "\r\n"; // prints "0"

# 3
$arr = [1 => "test", 2 => "best"];
echo array_keys($arr)[0] . "\r\n"; // prints "1"

Çözüm üzerinde avantajı:

list($firstKey) = array_keys($yourArray);

Bir işlev parametresi (yani doSomething(array_keys($arr)[0], $otherParameter)) olarak array_keys($arr)[0] geçebilir olmasıdır.

HTH

İlginçtir ki, foreach döngü aslında bunu yapmanın en etkili yoludur.

OP özellikle verimliliği hakkında sorulan bu yana, tüm geçerli cevaplar aslında çok daha az etkili bir foreach daha olduğunu işaret edilmelidir.

Ben php 5.4 ve sıfırlama / anahtar gösterici yöntemi (kabul cevap) ile bu konuda bir kriter yaptım bir foreach göre yaklaşık 7 kat daha yavaş gibi görünüyor. Tüm dizi (array_keys, array_flip) manipüle Diğer yaklaşımlar açıkçası daha yavaş ve geniş bir dizi ile çalışırken much kötüleşebilir.

Foreach tüm verimsiz değil, kullanmak için çekinmeyin!

Aşağıdaki bulabilirsiniz:

$yourArray = array('first_key'=> 'First', 2, 3, 4, 5);
$keys   =   array_keys($yourArray);
echo "Key = ".$keys[0];

Ben bu işe düşünüyorum.

Bu da bir çözüm olabilir.

$first_key = current(array_flip($array));

Ben test ettim ve çalışıyor.