Pobierz pierwszy element tablicy

Mam tablicę:

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

Chciałbym otrzymać pierwszy element tej tablicy. Oczekiwany wynik: string apple

Jeden wymóg: nie można tego zrobić z przekazaniem przez odniesienie , więc array_shift nie jest dobrym rozwiązaniem.

Jak mogę to zrobić?
 876
Author: Peter Mortensen, 2009-12-17

30 answers

Oryginalna odpowiedź, ale kosztowna (O (n)):

array_shift(array_values($array));

W O (1):

array_pop(array_reverse($array));

Edytowane z sugestiami z komentarzy do innych przypadków użycia itp...

Jeśli modyfikowanie (w sensie resetowania wskaźników tablicy) $array nie jest problemem, możesz użyć:

reset($array);

Teoretycznie powinno to być bardziej efektywne, jeśli potrzebna jest tablica "Kopia":

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

Z PHP 5.4+ (ale może spowodować błąd indeksu, jeśli jest pusty):

array_values($array)[0];
 1123
Author: blueyed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-29 12:28:59

Jak zauważył Mike (najprostszy możliwy sposób):

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

Jeśli chcesz uzyskać klucz: (wykonaj go po resecie)

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

Z dokumentacji PHP :

mieszane reset (array & $array );

Opis:

Reset () przewija wewnętrzny wskaźnik tablicy do pierwszego elementu i zwraca wartość pierwszego elementu tablicy lub FALSE, jeśli tablica jest pusty.

 725
Author: lepe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-19 03:05:56
$first_value = reset($array); // First Element's Value
$first_key = key($array); // First Element's Key
Mam nadzieję, że to pomoże. :)
 248
Author: IJas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-08 06:01:49
$arr = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'

Jeśli nie chcesz stracić bieżącej pozycji wskaźnika, po prostu utwórz alias dla tablicy.

 85
Author: yoda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-25 19:18:23

Można uzyskać n-ty element z konstrukcją językową "list":

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

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

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

Z funkcją array_keys możesz zrobić to samo dla kluczy:

list($firstKey) = array_keys($yourArray);
list(, $secondKey) = array_keys($yourArray);
 63
Author: Sergiy Sokolenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-12 13:50:40

current($array)

Może uzyskać pierwszy element tablicy, zgodnie z podręcznikiem PHP

Każda tablica ma wewnętrzny wskaźnik do swojego "bieżącego" elementu, który jest inicjowany do pierwszego elementu włożonego do tablicy.

Więc działa, dopóki nie ustawisz wskaźnika tablicy, w przeciwnym razie będziesz musiał zresetować tablicę.

 56
Author: Tofeeq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-08 12:31:30

PHP 5.4+:

array_values($array)[0];
 49
Author: Samer Ata,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-24 17:48:29

Przypuśćmy:

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

Po prostu użyj:

$array[key($array)]

Aby uzyskać pierwszy element lub

key($array)

Aby uzyskać pierwszy klucz.

Lub możesz odłączyć pierwszy, jeśli chcesz go usunąć.

 26
Author: Lucas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-09 12:32:47

Niektóre tablice nie działają z takimi funkcjami jak list, reset lub current. Być może są to" fałszywe " tablice-częściowo implementujące ArrayIterator, na przykład.

Jeśli chcesz wyciągnąć pierwszą wartość niezależnie od tablicy, możesz zwarć iterator:

foreach($array_with_unknown_keys as $value) break;

Twoja wartość będzie dostępna w $value i pętla zostanie przerwana po pierwszej iteracji. Jest to bardziej wydajne niż kopiowanie potencjalnie dużej tablicy do funkcji takiej jak array_unshift (array_values ($arr)).

Możesz też chwycić klucz w ten sposób:

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

Jeśli wywołujesz to z funkcji, po prostu wróć wcześniej:

function grab_first($arr) {
    foreach($arr as $value) return $value;
}
 20
Author: Lee Benson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-22 20:41:15

Po prostu zrób:

array_shift(array_slice($array,0,1));
 13
Author: DiverseAndRemote.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 11:19:46

Zrobiłbym echo current($array) .

 12
Author: user1485518,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-09 12:40:26
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
foreach($arr as $first) break;
echo $first;

Wyjście:

apple
 10
Author: tekin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-06 05:01:49
$array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

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

Jest to znacznie wydajniejsze niż array_values(), Ponieważ funkcja each() nie kopiuje całej tablicy.

Aby uzyskać więcej informacji zobacz http://www.php.net/manual/en/function.each.php

 9
Author: rustyx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-17 16:35:59
$myArray = array (4 => 'apple', 7 => 'orange', 13 => 'plum');
$arrayKeys = array_keys($myArray);

// the first element of your array is:
echo $myArray[$arrayKeys[0]];  
 9
Author: Jacob Topping,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-12 19:48:30

Od pomocników Laravela :

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

Tablica przekazywana przez wartość do funkcji, reset () wpływa na wewnętrzny wskaźnik kopii tablicy, nie dotyka oryginalnej tablicy. (Uwaga zwraca false jeśli tablica jest pusta)

Przykład użycia:

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

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


również tutaj jest alternatywa. Jest to bardzo marginalnie szybsze, ale ciekawsze, pozwala łatwo zmienić wartość domyślną, jeśli tablica jest pusta:

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

    return $default;
}
 9
Author: Gras Double,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-23 13:24:48

Kludny sposób to:

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

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

print get_first($foo);
 7
Author: William Macdonald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 08:13:15

Keep this simple! Wiele poprawnych odpowiedzi tutaj, ale aby zminimalizować wszystkie zamieszanie. Te dwie prace i zmniejszyć dużo kosztów.

key($array) = pobiera pierwszy klucz tablicy
current($array) = pobiera pierwszą wartość tablicy

 7
Author: tfont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-23 20:35:16

Get first element:

array_values($arr)[0]

Get last element

array_reverse($arr)[0]
 6
Author: Adobe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-24 11:25:02

Większość z nich działa! Ale dla szybkiego wywołania pojedynczej linii (niski zasób):

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

Chociaż to działa, i przyzwoicie dobrze, proszę również zobaczyć moją dodatkową odpowiedź: https://stackoverflow.com/a/48410351/1804013

 6
Author: tfont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-14 08:24:10

Myślę, że użycie array_values byłoby najlepszym rozwiązaniem tutaj. Możesz zwrócić wartość o indeksie zerowym z wyniku tej funkcji, aby uzyskać 'apple'.

 4
Author: jmking,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-17 13:23:12

Użycie:

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

Domyślnie array_slice nie zachowuje kluczy, więc możemy bezpiecznie używać zera jako indeksu.

 4
Author: Bazi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 11:20:43

PHP 7.3 dodano dwie funkcje do pobierania pierwszego i ostatniego klucza tablicy bezpośrednio bez modyfikacji oryginalnej tablicy i bez tworzenia żadnych tymczasowych obiektów:

Poza znaczeniem semantycznym, funkcje te nawet nie przesuwają wskaźnika tablicy (tak jak zrobiłby to foreach).

Mając klucze, można uzyskać wartości przez klucze bezpośrednio.


W tym celu należy użyć PHP 7.3+.]}

Uzyskanie pierwszego / ostatniego klucza i wartości:

$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];

Uzyskanie pierwszej / ostatniej wartości jako Jednowierszowe, zakładając, że tablica nie może być pusta :

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

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

Uzyskanie pierwszej / ostatniej wartości jako jednowierszowej, z domyślnymi wartościami dla pustych tablic:

$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) ];
 4
Author: Alex Shesterov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-18 13:52:01

Jest to trochę za późno na grę, ale pojawił się problem, w którym moja tablica zawierała elementy tablicy jako dzieci w środku, a więc nie mogłem po prostu uzyskać ciągowej reprezentacji pierwszego elementu tablicy. Przez używając funkcji PHP current() udało mi się:

<?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...
?>

Dzięki wszystkim obecnym rozwiązaniom pomógł mi dostać się do tej odpowiedzi, mam nadzieję, że to pomoże komuś kiedyś!

 3
Author: Chris Kempen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-20 11:48:49

Dwa rozwiązania dla Ciebie.

Rozwiązanie 1-Wystarczy użyć klucza. Nie powiedziałeś, że nie możesz z niego korzystać. :)

<?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. */');
?>

Rozwiązanie 2-array_flip () + key ()

<?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. */');
?>

Rozwiązanie 3-array_keys ()

echo $array[array_keys($array)[0]];
 3
Author: Jens A. Koch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-21 20:23:51

To nie jest tak prosta odpowiedź w realnym świecie. Supost, że mamy to przykłady możliwych odpowiedzi, które można znaleźć w niektórych bibliotekach.

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

Jak widzisz, mamy kilka rozwiązań "jednej linii", które w niektórych przypadkach działają dobrze, ale nie we wszystkich.

Moim zdaniem powinieneś mieć ten handler tylko z tablicami.

Teraz mówiąc o wydajności, zakładając, że zawsze mamy tablicę, TAK:

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

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

Array_shift jest szybszy niż reset, czyli bardziej fast that [count () -1] and this three are more fast that array_values and array_slice

 2
Author: Steven Koch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-18 18:18:07

Podoba mi się przykład "lista", ale "lista" działa tylko po lewej stronie zadania. Jeśli nie chcemy przypisywać zmiennej, będziemy zmuszeni stworzyć tymczasową nazwę, która w najlepszym przypadku zanieczyszcza nasz zakres, a w najgorszym nadpisuje istniejącą wartość:

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

Powyższe nadpisze dowolną istniejącą wartość $x, a zmienna $x będzie wisiała tak długo, jak ten zakres jest aktywny (koniec tej funkcji / metody lub na zawsze, jeśli jesteśmy na najwyższym poziomie). Można to obejść używanie call_user_func i funkcji anonimowej, ale jest niezgrabne:

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

Jeśli używamy funkcji anonimowych, takich jak ta, możemy rzeczywiście uciec z reset i array_shift, nawet jeśli używają pass-by-reference. Dzieje się tak, ponieważ wywołanie funkcji wiąże jej argumenty, a te argumenty mogą być przekazywane przez odwołanie:

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

Jest to jednak w rzeczywistości przesada, ponieważ call_user_func wykona to tymczasowe przypisanie wewnętrznie. To pozwala nam traktować funkcje pass-by-reference jakby były przechodnie, bez żadnych ostrzeżeń i błędów:

var_dump(call_user_func('reset', array_values(some_array())));
 1
Author: Warbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-12 16:32:11

Warto również pamiętać o kontekście, w którym to robisz, ponieważ wyczerpująca kontrola może być kosztowna i nie zawsze konieczna.

Na przykład To rozwiązanie działa dobrze w sytuacji, w której go używam (ale oczywiście nie można na nim polegać we wszystkich przypadkach...)

 /**
 * 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));
}
 1
Author: Dan King,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-11 15:46:03

Mała zmiana tego, co napisał Sarfraz:

$array = array(1, 2, 3, 4, 5);
$output = array_slice($array, 0, 1);
print_r ($output);
 1
Author: Jan Detlefsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 08:13:37

Stary post, ale w każdym razie... Domyślam się, że autor szukał sposobu na uzyskanie pierwszego elementu tablicy po pobraniu go z jakiejś funkcji (na przykład mysql_fetch_row) bez generowania ścisłego "tylko zmienne powinny być przekazywane przez odniesienie". Jeśli tak, to prawie wszystkie opisane tutaj sposoby otrzymają tę wiadomość... a niektóre z nich wykorzystują dużo dodatkowej pamięci duplikującej tablicę (lub jej część). Łatwym sposobem na uniknięcie tego jest przypisanie wartości inline przed wywołaniem któregokolwiek z tych funkcje:

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

W ten sposób nie otrzymasz ścisłego komunikatu na ekranie ani w logach i nie utworzysz żadnych dodatkowych tablic. Działa z tablicami zarówno indeksowanymi, jak i asocjacyjnymi

 1
Author: dmikam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-27 08:50:06

Nie lubię manipulować wewnętrznym wskaźnikiem tablicy, ale nieefektywne jest również budowanie drugiej tablicy z array_keys() lub array_values(), więc zwykle definiuję to:

function array_first(array $f) {
    foreach ($f as $v) {
        return $v;
    }
    throw new Exception('array was empty');
}
 1
Author: Jesse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-23 01:55:14