Bir dizinin ilk elemanını alın

21 Cevap php

Ben bir dizi var:

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

Ben bu dizinin ilk elemanı almak istiyorum. Beklenen sonuç: string apple

Bir gereksinimi: it cannot be done with passing by reference, yani array_shift iyi bir çözüm değildir.

Bunu nasıl yapabilirim?

21 Cevap

array_shift(array_values($array))

Edit If modifying (in the sense of resetting array pointers) of $array is not a problem, you might use:

reset($array)

Bir dizi "kopya" gerekiyorsa, bu, teorik olarak daha verimli olması gerekir:

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

PHP 5.4 + ile:

array_values($array)[0];

: Mike (mümkün olan en kolay yolu) belirttiği gibi

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

Dan PHP's documentation:

mixed reset (array &$array);

Açıklama:

reset() rewinds array's internal pointer to the first element and returns the value of the first array element, or FALSE if the array is empty.

$first_value = reset($array); // First Element's Value
$first_key = key($array); // First Element's Key

Umarım bu yardımcı olur. :)

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

Sadece dizi için bir takma ad oluşturmak, geçerli işaretçi konumunu kaybetmek istemiyorsanız.

Sen bir dil oluşumudur "liste" ile N. eleman alabilirsiniz:

// 1st item
list($firstItem) = $yourArray;

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

// 2nd item
list( , $secondItem) = $yourArray;

array_keys fonksiyonu ile size tuşları için aynı şeyi yapabilirsiniz:

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

Varsayalım:

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

Sadece kullanımı:

$array[key($array)]

İlk öğe veya almak için

key($array)

İlk anahtarı almak için.

Bunu kaldırmak istiyorsanız veya ilk bağlantısını kesebilirsiniz.

PHP 5.4 +:

array_values($array)[0];

Yapmanız gereken:

array_shift(array_slice($array,0,1));
$array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

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

each() function tüm dizi kopyalamak değildir, çünkü bu çok daha verimli array_values() daha.

Daha fazla bilgi için bkz http://www.php.net/manual/en/function.each.php

Ben yaparım echo current($array).

Most of these work! BUT for a quick single line (low resource) call:

$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)

Bir kıytırık bir yoldur:

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

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

print get_first($foo);

Bazı diziler list, reset veya current gibi fonksiyonları çalışmaz. Kısmen ArrayIterator uygulanması, örneğin, - Belki de "sahte" diziler demektir.

Ne olursa olsun dizinin ilk değerini çekmek istiyorsanız, kısa devre bir yineleyici yapabilirsiniz:

foreach($array_with_unknown_keys as $value) break;

Sizin değer daha sonra $value mevcut olacak ve döngü ilk yineleme sonra bozacaktır. Bu array_unshift (array_values ​​($ dizi)) gibi bir işlev için bir potansiyel olarak büyük bir dizi kopyalama daha verimlidir.

Sen tuşunu bu şekilde de çekebilirsiniz:

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

Eğer bir fonksiyonun bu arıyorsan, sadece erken dönüş:

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

Ben kullanarak array_values burada en iyi bahis olacağını düşünüyorum. Sen 'elma' almak o işlevin sonucu gelen dizin sıfır değerini geri dönebilirler.

Sarfraz yayınlanmıştır ne küçük bir değişikliktir:

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

Kullanın:

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

Varsayılan olarak, array_slice anahtarlarını korumak değil, bu yüzden güvenli endeksi olarak sıfır kullanabilirsiniz.

Sizin için iki çözüm.

Çözüm 1 - Sadece tuşunu kullanın. Sen bunu kullanmak cann't olduğunu söyledi değil.

<?php
// get 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şuna ()

<?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 an reset in
// just to make sure that the array pointer is at first element
// also reset return the first element
// reset($myArray);

// return first key 
$firstKey = key($array); 

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

Ben "liste" örnek ister, ama "listesi" sadece bir atamanın sol tarafında çalışır. Bir değişken atamak istemiyorsanız, biz en iyi bizim kapsamını kirletiyor ve en kötü ihtimalle mevcut bir değer yazar, hangi geçici bir isim telafi etmek zorunda olacaktır:

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

Yukarıdaki $ x varolan herhangi bir değerin üzerine yazılır ve (biz üst düzey iseniz sonsuza kadar bu fonksiyon / yöntemin sonuna, ya) $ x değişkeni sürece bu kapsam aktif olarak asmak olacaktır. Bu call_user_func ve bir anonim işlevini kullanarak etrafında çalışmış olabilir, ama o aksak var:

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

Bunun gibi anonim işlevlerini kullanırsanız, biz aslında onlar pass-by-reference kullanmak bile, reset ve array_shift kurtulabiliriz. Bir işlevi çağırırken onun argümanlarını bağlayacaktır çünkü bu, ve bu argümanlar referans tarafından kabul edilebilir:

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

Call_user_func dahili bu geçici atama gerçekleştirecek Ancak, bu, aslında overkill. Bu bize tedavi sağlar pass-by-referans fonksiyonlar onlar pass-by-value, herhangi bir uyarı veya hata olmadan sanki:

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

Ayrıntılı bir kontrol, pahalı ve her zaman gerekli değildir olabilir gibi de değer, aklın bunu yapıyoruz hangi bağlam içinde taşıyan.

Örneğin, bu çözüm ben bunu kullanıyorum hangi durum için çalışıyor (ama tabii ki her durumda dayanıyordu olamaz ...)

 /**
 * A quick and dirty way to determine whether the passed in array is associative or not, assuming that either:<br/>
 * <br/>
 * 1) All the keys are strings - i.e. associative<br/>
 * or<br/>
 * 2) All the keys are numeric - i.e. not associative<br/>
 * 
 * @param array $objects
 * @return boolean
 */
private function isAssociativeArray(array $objects)
{
    // This isn't true in the general case, but it's a close enough (and quick) approximation for the context in
    // which we're using it.

    reset($objects);
    return count($objects) > 0 && is_string(key($objects));
}

Doğru ve basit cevap:

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