Bir dizinin ilk öğesini edinin


1071

Ben bir dizi var:

array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )

Bu dizinin ilk elemanını almak istiyorum. Beklenen sonuç: dize apple

Bir gereklilik: referansla geçilerek yapılamaz , bu yüzden array_shiftiyi bir çözüm değildir.

Bunu nasıl yapabilirim?


1
Ne demek istiyorsun, referans ile yapılamaz?
cjk

İşlev &$arrayparams olarak kullanılmamalıdır .
hsz

4
Ben "gerçekten" ne demek "referans ile yapılamaz", dizi dinamik bir veritabanı döndürülüyor ve ilk öğeyi almadan önce dizi bir değişkene geçmek istemiyorum şüpheli ondan. Haklıysam, aşağıda size sunulan tüm çözümlerin büyük çoğunluğu (kabul edilen cevap dahil) yetersizdir.
cartbeforehorse

Sadece almak veya almak ve mevcut diziden kaldırmak zorunda mısınız?
Jo Smo

Dizilerin temel kullanımı için bu bağlantıyı inceleyebilirsiniz technofusions.com/introduction-to-arrays-in-php
Vikrant Vir

Yanıtlar:


1367

Orijinal cevap, ancak maliyetli (O (n)):

array_shift(array_values($array));

O (1) 'de:

array_pop(array_reverse($array));

Diğer kullanım durumları, vb ...

Öğesinin değiştirilmesi (dizi işaretleyicilerini sıfırlama anlamında) $arraysorun değilse, aşağıdakileri kullanabilirsiniz:

reset($array);

Bir dizi "kopya" gerekliyse, bu teorik olarak daha verimli olmalıdır:

array_shift(array_slice($array, 0, 1));

PHP 5.4+ ile (ancak boşsa bir dizin hatasına neden olabilir):

array_values($array)[0];

77
Akıllı çözüm +1 array_values orijinal dizi () modifiye önlemek için
ChrisR

44
Bunu alıyorum: <b> Katı Standartlar </b>: Yalnızca değişkenler başvuru ile iletilmelidir. Güzel geçici çözüm btw
Simone

191
Bu biraz abartılı değil mi? Dizi binlerce öğe içeriyorsa ne olur? Sadece ilk elemanını almak için tamamen yeni bir dizi oluşturmak haklı mı? list()ve reset()bence çok daha güzel çözümler.
Martin Dimitrov

33
Katılıyorum. Geçerli değeri sıfırlayan ve döndüren bir satıra kıyasla aşırı yük ve olağanüstü kaynak ağır: reset ($ array);
zmonteca

48
-1 Yukarıdaki yorumcular söylediler. Bunun 101 upvotes olması beni şaşırttı.
Yörüngedeki Hafiflik Yarışları

789

Mike'ın belirttiği gibi (mümkün olan en kolay yol):

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
echo reset($arr); // Echoes "apple"

Anahtarı almak istiyorsanız: (sıfırladıktan sonra yürütün)

echo key($arr); // Echoes "4"

Gönderen PHP'nin belgelerine :

karışık sıfırlama (dizi & $ dizi );

Açıklama:

reset (), dizinin dahili işaretçisini ilk öğeye geri sarar ve ilk dizi öğesinin değerini veya dizi boşsa FALSE değerini döndürür.


Sıfırlamak için referans olarak geçilmesine rağmen, orijinal dizi değiştirilmez. Sanırım hsz referans ile geçmek istemiyor nedeni budur ..?
Dennis Jamin

10
Dizinin yineleyicisi değiştirilir. Eğer bunu foreachkonu dizisiyle birlikte yaparsanız, onu kesersiniz.
Zenexer

2
@Zenexer bu her zaman (genellikle) doğru değildir. Genellikle pratikte, foreachiçinden geçtiği diziyi kopyalar.
Luke Cousins

1
@Angger sıfırlandıktan sonra arayabilir key($arr)ve '4' (yanıta eklenir) alırsınız
lepe

3
Ne @Zenexer ne de Luke Cousins ​​haklı: 1) foreach bir dizinin internat işaretçisini kullanmaz - onun yerine kendi işaretçisini oluşturur. Her bir çağrıyı sıfırlamak için kontrol etmek kolaydır - döngü, hiçbir etkisi olmadan yolunu takip edecektir reset(). 2) Hayır, foreach dizinin bir kopyasını oluşturmaz !!! Sadece kendi işaretçisini oluşturur (mevcut olanın bir kopyası bile değil - aynı zamanda kontrol etmek kolaydır, foreach'ten next()önce arama yapmak ).
dmikam

278
$first_value = reset($array); // First element's value
$first_key = key($array); // First element's key

2
Aslında test etmedim, ancak bu yaklaşım en etkili olacak gibi görünüyor.
mason81

4
Tek sorun, anahtar için değil, değer için sorulan sorudur. Bu nedenle, anahtar ($ dizi) yerine geçerli ($ dizi) kullanılmalıdır
zmonteca

4
@zmonteca $ first_value = sıfırla ($ dizi); Burada değer alırsınız, reset () işlevi dizileri dahili işaretçiyi geri sarar ve ilk öğeyi döndürür.
S3Mi

1
en iyi cevap! ilk değeri elde etmek için anahtar () eşdeğerini arıyordu. Bu yardımcı olur!
Alain Tiemblo

98
$arr = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'

Geçerli işaretçi konumunu kaybetmek istemiyorsanız, dizi için bir diğer ad oluşturun.


1
anlamadım, ne demek istiyorsun? İlkinin anahtarının diğerinden daha büyük olması iyi çalışıyor.
yoda

29
+1 FYI reset()zaten ilk elemanı döndürüyor, bu yüzden kullanmaya gerek yok current()- echo reset($arr)yeterli olmalı
Mike

@ Mike ancak tercih edebilirsiniz currentiçin resetPHP haber / başvuru durumlarda üretilen hata, örneğin önlemek için current(array_filter(...));de 3v4l .
CPHPython

91

current($array)PHP kılavuzuna göre size bir dizinin ilk elemanını verebilir .

Her dizi, diziye eklenen ilk öğeye başlatılan "geçerli" öğesine dahili bir işaretçi içerir.

Böylece dizi işaretçisini yeniden konumlandırana kadar çalışır, aksi takdirde diziyi sıfırlamanız gerekir.


4
Soruyu oldukça basit ve doğru bir şekilde cevapladığı için bunun neden kabul edilen cevap olmadığını bilmiyorum.
14'te

26
current($array)yalnızca dizi işaretçisi "şu anda" ilk öğeyi işaret ediyorsa çalışır, aksi takdirde reset($array)gereklidir.
Jon

6
Öyle görünüyor current()PHP dokümanlar bu yansıtmamaktadır rağmen, artık bir başvuru gerektirir. Bence bu en iyi çözüm haline geldi.
Ryan

@Ryan kabul etti, ancak bu çözüm 2014'ten 2 yıl önce aynı konunun diğer cevabında verildi ... Bu eksik cümlenin daha fazla oy alması garip.
CPHPython

70

Nth öğesini bir dil yapısı olan "list" ile alabilirsiniz:

// First item
list($firstItem) = $yourArray;

// First item from an array that is returned from a function
list($firstItem) = functionThatReturnsArray();

// Second item
list( , $secondItem) = $yourArray;

array_keysİşlev ile aynı işlemi tuşlar için de yapabilirsiniz:

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

2
Yaptığım şey tam olarak bu: list($first_value) = $my_array;Bence en iyi seçenek. Burada sunulan diğer cevaplardan gelen sorunlar yoktur: "overkill" yok çünkü kopyalamıyor, dizi veya yeni bir tane oluşturmuyor. "Başvuru" yok: dizi değiştirilmedi. "Sıfırla" yok: dizi dahili işaretçisinde değişiklik yok ...
J. Bruni

6
Çok zarif bir çözüm, ancak dizi boş olduğunda bir E_NOTICE atar.
Tgr

1
@ Evet, ama sonra artık o kadar şık değil :)
Tgr

13
Bu yanlış değil mi ?! Sadece dizi tuşları varsa çalışır int, yapmayı deneyin list($firstItem) = array('key1' => 'value1');ve bir hata alırsınızNotice: Undefined offset: 0
Marco Demaio

12
Açıklığa kavuşturmak için: list($x) = foo();eşittir $x = foo()[0];. Bir tamsayı dizinli dizi bile 0 anahtarlı bir öğe olmayabilir, çünkü bu "ilk öğeyi almak" ile aynı değildir unutmayın. Benim durumumda "list ($ order) = get_order ($ user) ;" ancak "get_order" kimlikleriyle anahtarlanan siparişleri döndürüyordu; bu genellikle 0 değildi. @Sergiy'in dediği gibi array_values ​​() bunu düzeltir, ancak kodun verimliliğini ve (daha önemlisi) okunabilirliğini azaltır.
Warbo

55

PHP 5.4+:

array_values($array)[0];

Bu, en sonuncuyu ve en iyiyi çalıştıran havalı insanlar içindir. ;)
Zenexer

1
Ekim 2013'te cevabını, Nisan ayında eklediğim yanıtı da içerecek şekilde düzenledi.
Samer Ata

PHP 4:$array_values = array_values($array); $value = $array_values[0];
zdick

38

PHP 7.3 , bir dizinin ilk ve son anahtarını doğrudan orijinal dizide değişiklik yapmadan ve herhangi bir geçici nesne oluşturmadan almak için iki işlev ekledi :

Anlamsal olarak anlamlı olmanın yanı sıra, bu işlevler dizi işaretçisini bile hareket ettirmez (olduğu gibi foreach).

Anahtarlara sahip olmak, değerleri doğrudan tuşlardan alabilir.


Örnekler (hepsi PHP 7.3+ gerektirir)

İlk / son anahtarı ve değeri elde etme:

$my_array = ['IT', 'rules', 'the', 'world'];

$first_key = array_key_first($my_array);
$first_value = $my_array[$first_key];

$last_key = array_key_last($my_array);
$last_value = $my_array[$last_key];

Dizinin boş olamayacağını varsayarak , ilk / son değeri tek satır olarak almak :

$first_value = $my_array[ array_key_first($my_array) ];

$last_value = $my_array[ array_key_last($my_array) ];

Boş diziler için varsayılan değerlerle ilk / son değeri tek satır olarak almak:

$first_value = empty($my_array) ? 'default' : $my_array[ array_key_first($my_array) ];

$last_value = empty($my_array) ? 'default' : $my_array[ array_key_last($my_array) ];

Null birleştirme operatörü ile kısaltın , genellikle null varsayılan olarak: $first_value = $my_array[array_key_first($my_array)] ?? null;
Mitchell McKenna

29

varsayalım:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

Sadece kullan:

$array[key($array)]

ilk elementi almak veya

key($array)

ilk anahtarı almak için.

Veya kaldırmak isterseniz ilk bağlantısını kaldırabilirsiniz.


9
currentO zaman sadece kullanmak değil mi?
Marco Demaio

27

Bazı diziler list, resetveya gibi işlevlerle çalışmaz.current . Belki de "sahte" dizilerdir - örneğin ArrayIterator'ı kısmen uygularlar.

Diziden bağımsız olarak ilk değeri çekmek isterseniz, bir yineleyiciye kısa devre yapabilirsiniz:

foreach($array_with_unknown_keys as $value) break;

Bu durumda değeriniz $value ve döngü ilk yinelemeden sonra kesilecektir. Bu, potansiyel olarak büyük bir diziyi array_unshift (array_values ​​($ arr)) gibi bir işleve kopyalamaktan daha etkilidir.

Anahtarı bu şekilde de alabilirsiniz:

foreach($array_with_unknown_keys as $key=>$value) break;

Bunu bir işlevden çağırıyorsanız, erken dönmeniz yeterlidir:

function grab_first($arr) {
    foreach($arr as $value) return $value;
}

Bunun en hızlı yollardan biri olduğunu düşünüyorum çünkü dil çağrısını bir işlev çağrısından ziyade foreach kullanarak (daha pahalı). designcise.com/web/tutorial/…
Ildar Amankulov

19

Gönderen laravel yardımcıları :

function head($array)
{
    return reset($array);
}

İşlev tarafından değere geçirilen dizi, reset () , dizinin bir kopyasının iç işaretçisini etkiler ve orijinal diziye dokunmaz (döndürdüğünü unutmayın)false dizi boşsa ).

Kullanım örneği:

$data = ['foo', 'bar', 'baz'];

current($data); // foo
next($data); // bar
head($data); // foo
next($data); // baz

Ayrıca, işte bir alternatif. Bu var çok marjinal daha hızlı, ancak daha ilginç. Dizi boşsa varsayılan değeri kolayca değiştirmenizi sağlar:

function head($array, $default = null)
{
    foreach ($array as $item) {
        return $item;
    }
    return $default;
}

Kayıt için, dizinin son elemanı için benim bir başka cevabım var.


17

Bunu basit tut! Burada birçok doğru cevap var, ancak tüm karışıklığı en aza indirgemek için, bu ikisi çalışıyor ve çok fazla yükü azaltıyor:

key($array)bir dizinin ilk anahtarını
current($array)alır bir dizinin ilk değerini alır


EDIT:
Aşağıdaki yorumlarla ilgili. Aşağıdaki örnek çıktı verecektir:string(13) "PHP code test"

$array = array
(
   '1'           => 'PHP code test',  
   'foo'         => 'bar', 5 , 5 => 89009, 
   'case'        => 'Random Stuff: '.rand(100,999),
   'PHP Version' => phpversion(),
   0             => 'ending text here'
);

var_dump(current($array));

11
Ahh. currentgeçerli öğeye eşittir. Başlangıçta olduğundan emin olmak için işaretçiyi dizinin başlangıcına sıfırlamanız gerekir.
waterloomatt

current (), ilk öğeyi değil, geçerli öğeyi alır. Bu farklı.
Amirhossein Tarmast

dizide yalnızca bir öğe varsa current çalışır.
Zameer Fouzan


14

Yapardım echo current($array).


1
@hsz Önemli değil, current()referans olmayanlar iletildiğinde hata vermiyor. İşaretçinin hala başında olması koşuluyla bu işe yarar.
Dan Lugg

ancak günlüklerinizi kirleten ve iyi yapan bir Uyarı üretir ... Kritik değilse Notices'ten de kurtulmalısınız
dmikam

1
@dmikam hayır değil. Aslında resetüretmez "Yalnızca değişkenler başvuru ile geçirilmesi gerekir" uyarı verir current: Çevrimiçi PHP Editör örneğicurrent(array_filter(...)); .
CPHPython

@CPHPython, haklısınız gibi görünüyor ... PHP 4'ün eski zamanlarından bu güncel fikri gerçekten öldürdüğü gibi görünüyor . Ölümcül hata: sandbox.onlinephpfunctions.com/code/… Akımı kullanırken gördüğüm tek sorun döndürülen öğenin bir dizinin ilk öğesi olduğunu garanti etmez (dahili işaretçi çağrılan işlev tarafından değiştirilebilir). Neredeyse bir dizinin rastgele elemanını döndürebilir.
dmikam

1
@CPHPython bir yapay örneği ısırdı ama gösteren iyi düşüncelerim: sandbox.onlinephpfunctions.com/code/... sadece bazı işlevinden dizinizi almalarını hayal that use next(), end()uğratıyorsa dizinin iç pointer o başka işlevi. Benim örnekte, current()iç işaretçi dizinin "aralık dışında olması nedeniyle" döner boş. Ancak 'sanal olarak' herhangi bir / rastgele öğeye de işaret edebilir.
dmikam

13
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
foreach($arr as $first) break;
echo $first;

Çıktı:

apple

10
$myArray = array (4 => 'apple', 7 => 'orange', 13 => 'plum');
$arrayKeys = array_keys($myArray);

// The first element of your array is:
echo $myArray[$arrayKeys[0]];

Kabul edilen cevapta tarif edildiği şekilde gitmedim. Teşekkürler kullanılmış
JayKandari

9
$array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

$firstValue = each($array)[1];

Bu çok daha verimli daha array_values()çünkü each()fonksiyon dizinin tamamı kopyalamaz.

Daha fazla bilgi için http://www.php.net/manual/en/function.each.php adresine bakın.


because the each() function does not copy the entire array.+1

2
Ancak mesele, daha önce bir sıfırlama yapmanız gerektiğidir, eğer iç işaretçi başlangıçta değilse ilk öğeyi alamayacaksınız.
Carlos Goce

Ancak her () referans olarak bir dizi alır ve ilk soruların gerekliliği bunu yapmak değildir
dmikam

8

Kludgy bir yol:

$foo = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

function get_first ($foo) {
    foreach ($foo as $k=>$v){
        return $v;
    }
}

print get_first($foo);

3
En azından dürüstsün - bu kludgy! Ama işe yarıyor ve yukarıdaki list () tekniğini öğrenene kadar geçmişte kullandım.
random_user_name

1
Bunu yapıyorsanız, yine de reset()dizi işaretçisinin sıfırlanmasından önce foreachde kullanabilirsiniz.
Tyzoid

7

İlk öğeyi al:

array_values($arr)[0]

Son öğeyi al

array_reverse($arr)[0]

Sayısal anahtarlar array_reverse ile korunur, böylece yine de ilk öğe döndürülür. 3v4l.org/2729s
Panik Do

7

Bu işlerin çoğu! AMA hızlı bir tek hat (düşük kaynak) çağrısı için:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $array[key($array)];

// key($array) -> will return the first key (which is 4 in this example)

Bu işe yarar ve terbiyeli olsa da, lütfen ek cevabımı da görün: https://stackoverflow.com/a/48410351/1804013


5
Bu, current($array)dizinin dahili işaretçisinin yine de ilk öğede olmasını gerektiren kullanıma eşdeğerdir , bu durumda echo reset($array)en uygun olanıdır.
Tyzoid

@Tyzoid aslında burada önerinizle başka bir cevap yazdı , ama açıklamanızı atladı ... Teşekkürler.
CPHPython

@Tyzoid: Ben birazdan ek bir cevap / güncelleme yaptım: stackoverflow.com/a/48410351/1804013
tfont 14:18 '

5

Ben dizi_değerleri kullanarak burada en iyi bahis olacağını düşünüyorum . 'Apple' elde etmek için bu işlevin sonucundan index dizinindeki değeri döndürebilirsiniz.


5

Bu oyuna biraz geç, ama benim dizi içinde çocuk olarak dizi öğeleri içeren bir sorun ile sunuldu, ve bu yüzden sadece ilk dizi elemanının bir dize temsili alamadım. By PHP'nin kullanarak current()işlevini , bu yönetilen:

<?php
    $original = array(4 => array('one', 'two'), 7 => array('three', 'four'));
    reset($original);  // to reset the internal array pointer...
    $first_element = current($original);  // get the current element...
?>

Tüm mevcut çözümler sayesinde bu yanıtı almama yardımcı oldu, umarım bu birisine yardımcı olur!


4

kullanın:

$first = array_slice($array, 0, 1);  
$val= $first[0];

Varsayılan olarak, array_sliceanahtarları korumaz, bu nedenle sıfır olarak dizin olarak güvenle kullanabiliriz.


4

Sizin için iki çözüm.

Çözüm 1 - Sadece anahtarı kullanın. Kullanamayacağınızı söylemediniz. :)

<?php
    // Get the first element of this array.
    $array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

    // Gets the first element by key
    $result = $array[4];

    // Expected result: string apple
    assert('$result === "apple" /* Expected result: string apple. */');
?>

Çözüm 2 - array_flip () + tuşu ()

<?php
    // Get first element of this array. Expected result: string apple
    $array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

    // Turn values to keys
    $array = array_flip($array);

    // You might thrown a reset in just to make sure
    // that the array pointer is at the first element.
    // Also, reset returns the first element.
    // reset($myArray);

    // Return the first key
    $firstKey = key($array);

    assert('$firstKey === "apple" /* Expected result: string apple. */');
?>

Çözüm 3 - Dizi_anahtarları ()

echo $array[array_keys($array)[0]];

2

Bu gerçek dünyada o kadar basit bir yanıt değildir. Bazı kütüphanelerde bulabileceğiniz olası yanıt örneklerine sahip olduğumuzu varsayalım.

$array1 = array();
$array2 = array(1,2,3,4);
$array3 = array('hello'=>'world', 'foo'=>'bar');
$array4 = null;

var_dump('reset1', reset($array1));
var_dump('reset2', reset($array2));
var_dump('reset3', reset($array3));
var_dump('reset4', reset($array4)); // Warning

var_dump('array_shift1', array_shift($array1));
var_dump('array_shift2', array_shift($array2));
var_dump('array_shift3', array_shift($array3));
var_dump('array_shift4', array_shift($array4)); // Warning

var_dump('each1', each($array1));
var_dump('each2', each($array2));
var_dump('each3', each($array3));
var_dump('each4', each($array4)); // Warning

var_dump('array_values1', array_values($array1)[0]); // Notice
var_dump('array_values2', array_values($array2)[0]);
var_dump('array_values3', array_values($array3)[0]);
var_dump('array_values4', array_values($array4)[0]); // Warning

var_dump('array_slice1', array_slice($array1, 0, 1));
var_dump('array_slice2', array_slice($array2, 0, 1));
var_dump('array_slice3', array_slice($array3, 0, 1));
var_dump('array_slice4', array_slice($array4, 0, 1)); // Warning

list($elm) = $array1; // Notice
var_dump($elm);
list($elm) = $array2;
var_dump($elm);
list($elm) = $array3; // Notice
var_dump($elm);
list($elm) = $array4;
var_dump($elm);

Gördüğünüz gibi, bazı durumlarda iyi çalışan, ancak hepsi değil, birkaç 'tek hat' çözümümüz var.

Bence, bu işleyiciyi sadece dizilerle yapmalısınız.

Şimdi performanstan bahsediyoruz, her zaman dizimiz olduğunu varsayarak, şöyle:

$elm = empty($array) ? null : ...($array);

...you would use without errors:
$array[count($array)-1];
array_shift
reset
array_values
array_slice

array_shiftdaha hızlıdır reset, bu [count () - 1] 'den daha hızlıdır ve bu üç array_valuesve' den daha hızlıdır array_slice.


2

Ben yazar sadece bazı fonksiyondan ( mysql_fetch_row) aldıktan sonra bir dizinin ilk elemanını almak için bir yol arıyordum hayal bir STRICT "Sadece değişkenler referans tarafından geçirilmelidir" üretmeden örneğin, ,) .

Öyleyse, burada açıklanan neredeyse tüm yollar bu mesajı alacaktır ... ve bazıları bir diziyi (veya bir kısmını) çoğaltan çok fazla ek bellek kullanır. Bundan kaçınmanın kolay bir yolu, bu işlevlerden herhangi birini çağırmadan önce satır içi değeri atamaktır:

$first_item_of_array = current($tmp_arr = mysql_fetch_row(...));
// or
$first_item_of_array = reset($tmp_arr = func_get_my_huge_array());

Bu şekilde, ekranda veya günlüklerde STRICT mesajını almazsınız ve başka diziler oluşturmazsınız. Bu çalışır hem endeksli VE ilişkisel diziler.


1

"Liste" örneğini seviyorum, ancak "liste" yalnızca bir ödevin sol tarafında çalışır. Bir değişken atamak istemezsek, en iyi şekilde kapsamımızı kirleten ve en kötü ihtimalle mevcut bir değerin üzerine yazan geçici bir ad oluşturmak zorunda kalırız:

list($x) = some_array();
var_dump($x);

Yukarıdakiler varolan herhangi bir $ x değerinin üzerine yazacak ve $ x değişkeni bu kapsam aktif olduğu sürece (bu fonksiyonun / yöntemin sonu ya da en üst seviyedeysek sonsuza kadar) takılır. Bu, call_user_func ve anonim bir işlev kullanılarak çözülebilir, ancak karmaşıktır:

var_dump(call_user_func(function($arr) { list($x) = $arr; return $x; },
                        some_array()));

Bunun gibi anonim işlevler kullanırsak, doğrudan başvuru kullanıyor olsalar bile reset ve array_shift ile gerçekten kurtulabiliriz. Bunun nedeni, bir işlevin çağrılmasının bağımsız değişkenlerini bağlaması ve bu bağımsız değişkenlerin başvuru ile iletilebilmesidir:

var_dump(call_user_func(function($arr) { return reset($arr); },
                        array_values(some_array())));

Ancak, call_user_func bu geçici atamayı dahili olarak gerçekleştireceğinden, bu aslında aşırıdır. Bu, referans yoluyla işlevlere, herhangi bir uyarı veya hata olmadan, değere göre değer gibi davranmamızı sağlar:

var_dump(call_user_func('reset', array_values(some_array())));

1

Sarfraz'ın yayınladığı şeyde küçük bir değişiklik:

$array = array(1, 2, 3, 4, 5);
$output = array_slice($array, 0, 1);
print_r ($output);

1

Dizinin iç işaretçisi ile uğraşmayı sevmiyorum, ama aynı zamanda array_keys()veya ile ikinci bir dizi oluşturmak da yetersiz array_values(), bu yüzden genellikle bunu tanımlarım:

function array_first(array $f) {
    foreach ($f as $v) {
        return $v;
    }
    throw new Exception('array was empty');
}

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.